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

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)

任何帮助赞赏!

Wes*_*ger 6

好吧,我试图修复它,但我不确定它是否真的有效.

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可用并使用它.对于MSDNMSDN,默认情况下启用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


TLJ*_*TLJ 3

我认为你必须添加/arch:avx2编译器标志。一种方法是修改您的CMakeCache.txt构建文件夹。寻找一行CMAKE_CXX_FLAGS:STRING并将其修改为

CMAKE_CXX_FLAGS:STRING=/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2 /fp:fast
Run Code Online (Sandbox Code Playgroud)

然而,根据github上的这个问题/arch:avx2此刻(在 HEAD 处)已损坏。