Aer*_*lic 6 c++ windows msbuild tensorflow
随着最新版本的Tensor Flow现在在Windows上,我试图尽可能高效地运行一切.但是,即使从源代码编译,我仍然无法弄清楚如何启用SSE和AVX指令.
默认进程:https: //github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/contrib/cmake 没有提到如何执行此操作.
我发现的唯一参考是使用Google的Bazel: 如何使用SSE4.2和AVX指令编译Tensorflow?
有没有人知道使用MSBuild打开这些高级指令的简单方法?我听说他们至少加速了3倍.
为了帮助那些寻找类似解决方案的人,这是我目前得到的警告:https: //github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/contrib/cmake
我在64位平台上使用Windows 10 Professional,Visual Studio 2015社区版,带有cmake版本3.6.3的Anaconda Python 3.6(更高版本不适用于Tensor Flow)
任何帮助赞赏!
好吧,我试图修复它,但我不确定它是否真的有效.
在CMakeLists.txt
您将找到以下声明:
if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
Run Code Online (Sandbox Code Playgroud)
在MSVC平台上,测试失败,因为MSVC不支持-march=native
标志.我修改了如下语句:
if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
else()
CHECK_CXX_COMPILER_FLAG("/arch:AVX" COMPILER_OPT_ARCH_AVX_SUPPORTED)
if(COMPILER_OPT_ARCH_AVX_SUPPORTED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
endif()
endif()
endif()
Run Code Online (Sandbox Code Playgroud)
通过这样做,cmake将检查是否/arch:AVX
可用并使用它.对于MSDN和MSDN,默认情况下启用SSE2支持进行x86编译,但不支持x64编译.对于x64编译,您可以选择使用AVX或AVX2.我上面使用AVX是因为我的CPU只支持AVX,如果你有兼容的CPU,你可以试试AVX2.
通过编译使用上述内容CMakeLists.txt
,编译程序比官方版本慢得多,并且关于"AVX/AVX2"的警告消失了,但仍然存在关于SSE/SSE2/3/4.1/4.2的警告.我认为这些警告可以忽略,因为x64 MSBuild没有SSE支持.
我现在正在测试新的pip包.它可能比以前更快,但我不想写一个新的基准...
任何对此感兴趣的人,请测试新包装是否真的更快.
我在2017-3-12的持续git master分支上做了所有这些.pip包名称显示它是tensorflow 1.0.1
我认为你必须添加/arch:avx2
编译器标志。一种方法是修改您的CMakeCache.txt
构建文件夹。寻找一行CMAKE_CXX_FLAGS:STRING
并将其修改为
Run Code Online (Sandbox Code Playgroud)CMAKE_CXX_FLAGS:STRING=/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2 /fp:fast
然而,根据github上的这个问题。/arch:avx2
此刻(在 HEAD 处)已损坏。