如何在Windows上使用SSE和AVX指令编译Tensor Flow?

现在在Windows上使用最新版本的Tensor Flow,我试图尽可能高效地工作。 但是,即使从源代码编译,我仍然无法弄清楚如何启用SSE和AVX指令。

默认进程: https : //github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/contrib/cmake没有提到如何做到这一点。

我发现的唯一参考就是使用Google的Bazel: 如何用SSE4.2和AVX指令编译Tensorflow?

有谁知道使用MSBuild打开这些高级指令的简单方法? 我听说他们的速度至less提高了3倍。

为了帮助那些寻找类似的解决scheme,这是我目前正在看到的警告: https : //github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/contrib/cmake

我在64位平台上使用Windows 10 Professional,Visual Studio 2015 Community Edition,带有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) 

在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() 

通过这样做,cmake会检查/arch:AVX是否可用并使用它。 根据MSDN和MSDN ,对于x86编译,默认启用SSE2支持,但不能用于x64编译。 对于x64编译,您可以选择使用AVX或AVX2。 我以上使用过AVX,因为我的CPU只支持AVX,如果你有一个兼容的CPU,你可以试试AVX2。

通过编译使用上面的CMakeLists.txt ,编译速度比正式发布慢得多,关于“AVX / AVX2”的警告消失了,但是仍然存在关于SSE / SSE2 / 3 / 4.1 / 4.2的警告。 我认为这些警告可以忽略,因为没有SSE支持x64 MSBuild。

我现在正在测试新的pip软件包。 这可能比以前更快,但我不想写一个新的基准…

任何对此感兴趣的人,请测试新包是否真的更快。

我在2017年3月12日的git master分支上做了所有这些。 pip软件包名称显示为tensorflow 1.0.1

我想你将不得不添加/arch:avx2编译器标志。 一种方法是修改您的build文件夹中的CMakeCache.txt 。 寻找一行CMAKE_CXX_FLAGS:STRING并将其修改为

 CMAKE_CXX_FLAGS:STRING=/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2 /fp:fast 

不过,根据github上的这个问题 。 /arch:avx2目前是坏的(在HEAD)。

你可以找到预建的tensorflow1.4的Windows轮与AVX2指令兼容python 3.5.3在下面的回购

https://github.com/faisalthaheem/tensorflow-windows

建设步骤也提到

Tensorflow在标记“tensorflow_WIN_CPU_SIMD_OPTIONS”上出现错误。

这是一个标志,而不是布尔值。

修复图像之前

修复图像后


如何解决它

“Tensorflow-github / tensorflow / contrib / cmake / CMakeLists.txt”34行,有:

 option(tensorflow_WIN_CPU_SIMD_OPTIONS "Enables CPU SIMD instructions") 

替换它

 set(tensorflow_WIN_CPU_SIMD_OPTIONS "/arch:AVX" CACHE STRING "Enables CPU SIMD instructions" ) 

然后,清除cmake缓存( 位置 ),然后重新配置。

你会发现tensorflow_WIN_CPU_SIMD_OPTIONS是一个带有输入区而不是复选框的标志。


tensorflow_WIN_CPU_SIMD_OPTIONS

“/ arch:AVX”或“/ arch:AVX2”可用