如何在Windows上使用SSE和AVX指令编译Tensor Flow?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Windows上使用SSE和AVX指令编译Tensor Flow?相关的知识,希望对你有一定的参考价值。
随着最新版本的Tensor Flow现在在Windows上,我试图尽可能高效地运行一切。但是,即使从源代码编译,我仍然无法弄清楚如何启用SSE和AVX指令。
默认过程:https://github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/contrib/cmake没有提到如何执行此操作。
我发现的唯一参考是使用Google的Bazel:How to compile Tensorflow with SSE4.2 and AVX instructions?
有谁知道使用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)
在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,默认情况下启用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
并将其修改为
CMAKE_CXX_FLAGS:STRING=/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2 /fp:fast
但是,根据github上的this issue。 /arch:avx2
此刻被打破(在HEAD)。
Tensorflow在标志“tensorflow_WIN_CPU_SIMD_OPTIONS”上出错。
它是一个Flag,而不是一个布尔值。
如何解决它
“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缓存(location),并重新配置。
您会发现tensorflow_WIN_CPU_SIMD_OPTIONS是带有输入区域的标志而不是复选框。
tensorflow_WIN_CPU_SIMD_OPTIONS
“/ arch:AVX”或“/ arch:AVX2”可用
以上是关于如何在Windows上使用SSE和AVX指令编译Tensor Flow?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?
如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?
如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?
TensorFlow关于 SSE AVX的Warning问题