如何使用ARM NEON构建特征 - 编译错误(对于Tensorflow)

时间:2017-06-07 16:56:48

标签: tensorflow eigen

我正在尝试构建Tensorflow 1.2-rc1,但是如果我尝试使用-mfpu = neon标志进行编译,则构建失败。如果我使用-mfpu = vfpv3标志,那么构建工作正常。这是一个beaglebone黑色基板。有没有人成功地在这种类型的平台上构建它?

Tensorflow来自此提交:https://bitbucket.org/eigen/eigen/commits/f3a22f35b0444e03a1f65941800b9a2283de1398

我收到了构建错误:

ERROR: /mnt/tensorflow/tensorflow/core/kernels/BUILD:2128:1: C++ compilation of rule '//tensorflow/core/kernels:svd_op' failed: gcc failed: error executing command 

  (cd /home/snap/.cache/bazel/_bazel_root/ef9923c1cfd90b0d686a7ea3591643c7/execroot/tensorflow && \

  exec env - \

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \

    PYTHON_BIN_PATH=/usr/bin/python \

    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \

    TF_NEED_CUDA=0 \

    TF_NEED_OPENCL=0 \

  /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections '-march=armv7-a' '-mfpu=neon' -funsafe-math-optimizations -ftree-vectorize -fomit-frame-pointer '-std=c++11' '-std=c++0x' -MD -MF bazel-out/local-opt/bin/tensorflow/core/kernels/_objs/svd_op/tensorflow/core/kernels/svd_op_complex64.pic.d '-frandom-seed=bazel-out/local-opt/bin/tensorflow/core/kernels/_objs/svd_op/tensorflow/core/kernels/svd_op_complex64.pic.o' -fPIC -DEIGEN_MPL2_ONLY -DSNAPPY -iquote . -iquote bazel-out/local-opt/genfiles -iquote external/bazel_tools -iquote bazel-out/local-opt/genfiles/external/bazel_tools -iquote external/protobuf -iquote bazel-out/local-opt/genfiles/external/protobuf -iquote external/eigen_archive -iquote bazel-out/local-opt/genfiles/external/eigen_archive -iquote external/local_config_sycl -iquote bazel-out/local-opt/genfiles/external/local_config_sycl -iquote external/gif_archive -iquote bazel-out/local-opt/genfiles/external/gif_archive -iquote external/jpeg -iquote bazel-out/local-opt/genfiles/external/jpeg -iquote external/com_googlesource_code_re2 -iquote bazel-out/local-opt/genfiles/external/com_googlesource_code_re2 -iquote external/farmhash_archive -iquote bazel-out/local-opt/genfiles/external/farmhash_archive -iquote external/fft2d -iquote bazel-out/local-opt/genfiles/external/fft2d -iquote external/highwayhash -iquote bazel-out/local-opt/genfiles/external/highwayhash -iquote external/png_archive -iquote bazel-out/local-opt/genfiles/external/png_archive -iquote external/zlib_archive -iquote bazel-out/local-opt/genfiles/external/zlib_archive -iquote external/snappy -iquote bazel-out/local-opt/genfiles/external/snappy -isystem external/bazel_tools/tools/cpp/gcc3 -isystem external/protobuf/src -isystem bazel-out/local-opt/genfiles/external/protobuf/src -isystem external/eigen_archive -isystem bazel-out/local-opt/genfiles/external/eigen_archive -isystem external/gif_archive/lib -isystem bazel-out/local-opt/genfiles/external/gif_archive/lib -isystem external/farmhash_archive/src -isystem bazel-out/local-opt/genfiles/external/farmhash_archive/src -isystem external/png_archive -isystem bazel-out/local-opt/genfiles/external/png_archive -isystem external/zlib_archive -isystem bazel-out/local-opt/genfiles/external/zlib_archive -DEIGEN_AVOID_STL_ARRAY -Iexternal/gemmlowp -Wno-sign-compare -fno-exceptions -pthread -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c tensorflow/core/kernels/svd_op_complex64.cc -o bazel-out/local-opt/bin/tensorflow/core/kernels/_objs/svd_op/tensorflow/core/kernels/svd_op_complex64.pic.o): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.

In file included from external/eigen_archive/Eigen/Core:451:0,

                 from external/eigen_archive/Eigen/QR:11,

                 from external/eigen_archive/Eigen/SVD:11,

                 from ./third_party/eigen3/Eigen/SVD:1,

                 from ./tensorflow/core/kernels/svd_op_impl.h:23,

                 from tensorflow/core/kernels/svd_op_complex64.cc:16:

external/eigen_archive/Eigen/src/Core/util/BlasUtil.h: In instantiation of 'struct Eigen::internal::conj_helper<__vector(4) __builtin_neon_sf, Eigen::internal::Packet2cf, false, false>':

external/eigen_archive/Eigen/src/Jacobi/Jacobi.h:339:77:   required from 'void Eigen::internal::apply_rotation_in_the_plane(Eigen::DenseBase<Derived>&, Eigen::DenseBase<Derived>&, const Eigen::JacobiRotation<OtherScalar>&) [with VectorX = Eigen::Block<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 1, -1, true>; VectorY = Eigen::Block<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 1, -1, true>; OtherScalar = float]'

external/eigen_archive/Eigen/src/Jacobi/Jacobi.h:282:48:   required from 'void Eigen::MatrixBase<Derived>::applyOnTheLeft(Eigen::Index, Eigen::Index, const Eigen::JacobiRotation<OtherScalar>&) [with OtherScalar = float; Derived = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::Index = int]'

external/eigen_archive/Eigen/src/SVD/JacobiSVD.h:725:13:   required from 'Eigen::JacobiSVD<MatrixType, QRPreconditioner>& Eigen::JacobiSVD<MatrixType, QRPreconditioner>::compute(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; int QRPreconditioner = 2; Eigen::JacobiSVD<MatrixType, QRPreconditioner>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/JacobiSVD.h:548:41:   required from 'Eigen::JacobiSVD<MatrixType, QRPreconditioner>::JacobiSVD(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; int QRPreconditioner = 2; Eigen::JacobiSVD<MatrixType, QRPreconditioner>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/BDCSVD.h:251:57:   required from 'Eigen::BDCSVD<_MatrixType>& Eigen::BDCSVD<MatrixType>::compute(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::BDCSVD<MatrixType>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/BDCSVD.h:136:39:   required from 'Eigen::BDCSVD<MatrixType>::BDCSVD(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::BDCSVD<MatrixType>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

./tensorflow/core/kernels/svd_op_impl.h:88:49:   required from 'void tensorflow::SvdOp<Scalar>::ComputeMatrix(tensorflow::OpKernelContext*, const ConstMatrixMaps&, tensorflow::SvdOp<Scalar>::MatrixMaps*) [with Scalar = std::complex<float>; tensorflow::SvdOp<Scalar>::ConstMatrixMaps = tensorflow::gtl::InlinedVector<Eigen::Map<const Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, 4>; tensorflow::SvdOp<Scalar>::MatrixMaps = tensorflow::gtl::InlinedVector<Eigen::Map<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, 4>]'

tensorflow/core/kernels/svd_op_complex64.cc:23:1:   required from here

external/eigen_archive/Eigen/src/Core/util/BlasUtil.h:63:74: error: no type named 'ReturnType' in 'struct Eigen::ScalarBinaryOpTraits<__vector(4) __builtin_neon_sf, Eigen::internal::Packet2cf, Eigen::internal::scalar_product_op<__vector(4) __builtin_neon_sf, Eigen::internal::Packet2cf> >'

   typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar>::ReturnType Scalar;

                                                                          ^

In file included from external/eigen_archive/Eigen/Jacobi:27:0,

                 from external/eigen_archive/Eigen/QR:16,

                 from external/eigen_archive/Eigen/SVD:11,

                 from ./third_party/eigen3/Eigen/SVD:1,

                 from ./tensorflow/core/kernels/svd_op_impl.h:23,

                 from tensorflow/core/kernels/svd_op_complex64.cc:16:

external/eigen_archive/Eigen/src/Jacobi/Jacobi.h: In instantiation of 'void Eigen::internal::apply_rotation_in_the_plane(Eigen::DenseBase<Derived>&, Eigen::DenseBase<Derived>&, const Eigen::JacobiRotation<OtherScalar>&) [with VectorX = Eigen::Block<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 1, -1, true>; VectorY = Eigen::Block<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 1, -1, true>; OtherScalar = float]':

external/eigen_archive/Eigen/src/Jacobi/Jacobi.h:282:48:   required from 'void Eigen::MatrixBase<Derived>::applyOnTheLeft(Eigen::Index, Eigen::Index, const Eigen::JacobiRotation<OtherScalar>&) [with OtherScalar = float; Derived = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::Index = int]'

external/eigen_archive/Eigen/src/SVD/JacobiSVD.h:725:13:   required from 'Eigen::JacobiSVD<MatrixType, QRPreconditioner>& Eigen::JacobiSVD<MatrixType, QRPreconditioner>::compute(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; int QRPreconditioner = 2; Eigen::JacobiSVD<MatrixType, QRPreconditioner>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/JacobiSVD.h:548:41:   required from 'Eigen::JacobiSVD<MatrixType, QRPreconditioner>::JacobiSVD(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; int QRPreconditioner = 2; Eigen::JacobiSVD<MatrixType, QRPreconditioner>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/BDCSVD.h:251:57:   required from 'Eigen::BDCSVD<_MatrixType>& Eigen::BDCSVD<MatrixType>::compute(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::BDCSVD<MatrixType>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

external/eigen_archive/Eigen/src/SVD/BDCSVD.h:136:39:   required from 'Eigen::BDCSVD<MatrixType>::BDCSVD(const MatrixType&, unsigned int) [with _MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>; Eigen::BDCSVD<MatrixType>::MatrixType = Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>]'

./tensorflow/core/kernels/svd_op_impl.h:88:49:   required from 'void tensorflow::SvdOp<Scalar>::ComputeMatrix(tensorflow::OpKernelContext*, const ConstMatrixMaps&, tensorflow::SvdOp<Scalar>::MatrixMaps*) [with Scalar = std::complex<float>; tensorflow::SvdOp<Scalar>::ConstMatrixMaps = tensorflow::gtl::InlinedVector<Eigen::Map<const Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, 4>; tensorflow::SvdOp<Scalar>::MatrixMaps = tensorflow::gtl::InlinedVector<Eigen::Map<Eigen::Matrix<std::complex<float>, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, 4>]'

tensorflow/core/kernels/svd_op_complex64.cc:23:1:   required from here

external/eigen_archive/Eigen/src/Jacobi/Jacobi.h:359:55: error: 'struct Eigen::internal::conj_helper<__vector(4) __builtin_neon_sf, Eigen::internal::Packet2cf, false, false>' has no member named 'pmul'

         pstore(px, padd(pm.pmul(pc,xi),pcj.pmul(ps,yi)));

                                                       ^

2 个答案:

答案 0 :(得分:1)

这个问题已由Eigen的一位作者解决。 https://github.com/tensorflow/tensorflow/issues/9697

答案 1 :(得分:1)

正好记录在案,

在/tensorflow/workspace.bzl中 在第147行: 变化:

#Longitude values:
a=0
b=360

prcp = np.load('data.npy')

data=np.average(prcp,axis=0)

plt.figure()
# create Basemap
x1 = np.linspace(a,b, data.shape[1])
y1 = np.linspace(-90, 90, data.shape[0])
xx1, yy1 = np.meshgrid(x1, y1)

data, x1 = shiftgrid(180., data, x1,start= False)

  native.new_http_archive(
      name = "eigen_archive",
      urls = [
          "http://mirror.bazel.build/bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz",
          "https://bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz",
      ],
      sha256 = "ca7beac153d4059c02c8fc59816c82d54ea47fe58365e8aded4082ded0b820c4",
      strip_prefix = "eigen-eigen-f3a22f35b044",
      build_file = str(Label("//third_party:eigen.BUILD")),
  )