我正在使用armclang使用Bazel 0.19.2构建Tensorflow 1.13.1。 Bazel在某些方面仍然需要GCC,但我不能使其使用Arm GCC,而是使用默认的RHEL GCC。
如果我需要在Github上发布问题,请告诉我。
我已经设置了这些标志
export CC=armclang;
export CXX=armclang++;
export FC=armflang;
export F77=armflang;
export CXXFLAGS="-stdlib=libc++ -L$ARM_HPC_COMPILER_DIR/lib";
export LDFLAGS="-L$ARM_HPC_COMPILER_DIR/lib -lm -lrt";
并通过加载Arm Compiler模块,将GCC设置为:
/opt/arm/gcc-8.2.0_Generic-AArch64_RHEL-7_aarch64-linux/bin/gcc
设置armclang
grep -rl march . | xargs sed -i 's/march/mcpu/g'
用于armclang的Tensorflow构建
bazel build --copt="-armpl" --config=opt --config=noaws //tensorflow/tools/pip_package:build_pip_package --verbose_failures
它可以在使用默认GCC的Ubuntu上运行,但不能与RHEL GCC一起使用,因此我需要强制它使用Arm GCC。
ERROR: /home/lukire01/Code/armclang-tf/tensorflow/tensorflow/core/grappler/graph_analyzer/BUILD:5:1: C++ compilation of rule '//tensorflow/core/grappler/graph_analyzer:graph_analyzer_lib' failed (Exit 1): armclang failed: error executing command
很明显这里使用的是错误的GCC
/usr/lib/gcc/aarch64-redhat-linux/4.8.5/../../../../include/c++/4.8.5/bits/unordered_map.h:257:7: note: selected 'begin' function with iterator type 'std::unordered_map<tensorflow::grappler::graph_analyzer::GenNode::Port, std::vector<tensorflow::grappler::graph_analyzer::GenNode::LinkTarget, std::allocator<tensorflow::grappler::graph_analyzer::GenNode::LinkTarget> >, tensorflow::grappler::graph_analyzer::GenNode::Port::Hasher, std::equal_to<tensorflow::grappler::graph_analyzer::GenNode::Port>, std::allocator<std::pair<const tensorflow::grappler::graph_analyzer::GenNode::Port, std::vector<tensorflow::grappler::graph_analyzer::GenNode::LinkTarget, std::allocator<tensorflow::grappler::graph_analyzer::GenNode::LinkTarget> > > > >::const_iterator' (aka 'int')
begin() const noexcept