代码之家  ›  专栏  ›  技术社区  ›  apalomer

在带有sse/avx的库旁边使用ceres时出错

  •  0
  • apalomer  · 技术社区  · 6 年前

    我有一个模板库,其中有些函数专门用于float和double类型。此专门化使用sse/avx,因此,此库具有 -march=native -mavx2 编译器标志。当我试图使用这个库的某个函数(不是专门的)时,我从ceres得到以下运行时错误:

    test_ceres: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<double, 4, 0, 32>::plain_array() [T = double, Size = 4, MatrixOrArrayOptions = 0, Alignment = 32]: Assertion `(internal::UIntPtr(array) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
    

    我已经能够用更简单的代码再现错误: here . 基本上,当 -mavx2 -march=native 标志将被移除,并且在出现时不起作用(产生上一个错误)(来自cmakelists.txt的注释和取消注释)。在本例中,不存在使用avx/sse的函数,但请记住,我的库中有这些函数,因此删除标志 -mavx2-march=本机 不是一个选择。有什么办法解决这个问题吗?当我编译ceres时,我添加了国旗 -DCMAKE_CXX_FLAGS="-march=native" 正如 documentation .

    阅读 webpage provided in the error message 没有提供任何解决方案。

    关于我的系统的一些有用信息:

    • 编译:clang++
      • Clang版本6.0.0-1ubuntu2(标签/发行版/600/最终版)
      • 目标:x86_64-pc-linux-gnu
      • 线程模型:posix
    • ceres版本:2.0(实际上我有git repo,几分钟前就更新了:)
    • CPU:Intel(R)Core(TM)i7-4770 CPU@3.40GHz
    1 回复  |  直到 6 年前
        1
  •  1
  •   Sameer Agarwal    5 年前

    考虑在特征邮件列表中询问这个问题。这不是谷神星解决方案的问题。