从源构建Tensorflow时出现非法指令错误

时间:2017-08-25 08:19:21

标签: python gcc tensorflow

我用bazel从源代码构建张量流,如下所述: https://www.tensorflow.org/install/install_sources

按照安装文档,我使用以下代码成功编译:

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both \
--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"--config=cuda \
-k //tensorflow/tools/pip_package:build_pip_package

接受的答案here和安装文档中的注释"将--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"添加到gcc 5及更高版本"的构建命令中。

但是,import tensorflow as tf会导致错误

illegal instruction (core dumped), exiting python.

我还试过:conda update libgcc无济于事。

如何使用gcc 5.0从源代码构建tensorflow?

1 个答案:

答案 0 :(得分:6)

错误消息告诉我你的程序是用你的处理器没有的指令编译的,看看你的构建字符串让我怀疑-mavx2-mfma哪个AFAIK只在最近才实现(和高端)CPU。 请注意, gcc将使用标志进行编译,以获得CPU不支持的指令,但程序无法在您的计算机上运行

要确保您的CPU支持这些标志,请在bash gcc -march=native -Q --help=target | grep enabled中运行并检查输出是否包含您要使用的所有构建标志(-mfpmath除外,它不显示为启用或禁用,因为它允许输出列表。为此,您需要检查完整的gcc -march=...命令输出。

要回答您的最终评论,没有办法“启用”这些说明,它们是在硬件中实现的,它们可以在您的CPU上使用,或者它们不是。