gpt4 book ai didi

tensorflow - 如何用SSE4.2和AVX指令编译Tensorflow?

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:57 24 4
gpt4 key购买 nike

这是运行脚本以检查 Tensorflow 是否正常工作时收到的消息:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

我注意到它提到了SSE4.2和AVX,

  1. 什么是 SSE4.2 和 AVX?
  2. 这些 SSE4.2 和 AVX 如何改进 Tensorflow 任务的 CPU 计算。
  3. 如何使用这两个库编译Tensorflow?

最佳答案

我刚遇到同样的问题,Yaroslav Bulatov 的建议似乎没有涵盖 SSE4.2 支持,添加 --copt=-msse4.2 就足够了。最后,我成功构建了

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

没有收到任何警告或错误。

对于任何系统来说,最好的选择可能是:

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

(更新:the build scripts may be eating -march=native,可能是因为它包含一个 =。)

-mfpmath=both 仅适用于 gcc,不适用于 clang。 -mfpmath=sse 可能同样好,甚至更好,并且是 x86-64 的默认值。 32 位构建默认为 -mfpmath=387,因此更改它有助于 32 位。 (但如果你想要高性能的数字运算,你应该构建 64 位二进制文​​件。)

我不确定 TensorFlow 默认的 -O2-O3 是什么。 gcc -O3 启用全面优化,包括自动矢量化,但有时会使代码变慢。


这是做什么的:--copt for bazel build将一个选项直接传递给 gcc 以编译 C 和 C++ 文件(但不链接,因此您需要一个不同的选项来进行跨文件链接时间优化)

x86-64 gcc 默认仅使用 SSE2 或更旧的 SIMD 指令,因此您可以在任何 x86-64 系统上运行二进制文件。 (参见 https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html)。那不是你想要的。你想制作一个二进制文件,利用你的 CPU 可以运行的所有指令,因为你只在你构建它的系统上运行这个二进制文件。

-march=native 启用您的 CPU 支持的所有选项,因此它使 -mavx512f -mavx2 -mavx -mfma -msse4.2 变得多余。 (此外,-mavx2 已经启用了 -mavx-msse4.2,所以 Yaroslav 的命令应该没问题)。此外,如果您使用的 CPU 不支持这些选项之一(如 FMA),则使用 -mfma 会使二进制文件因非法指令而出错。

TensorFlow's ./configure defaults to enabling -march=native ,因此使用它应该避免需要手动指定编译器选项。

-march=native 启用-mtune=native,所以it optimizes for your CPU对于诸如哪个 AVX 指令序列最适合未对齐加载之类的事情。

这都适用于 gcc、clang 或 ICC。 (对于 ICC,您可以使用 -xHOST 而不是 -march=native。)

关于tensorflow - 如何用SSE4.2和AVX指令编译Tensorflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com