1

我有一个模板库,其中一些函数专门用于浮点和双精度类型。此专业化使用 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=native不是一种选择。关于如何解决这个问题的任何想法?当我编译 Ceres 时,我添加了文档-DCMAKE_CXX_FLAGS="-march=native"中指出的标志。

阅读错误消息中提供的网页并没有提供任何解决方案。

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

  • 编译器:clang++
    • clang 版本 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
    • 目标:x86_64-pc-linux-gnu
    • 线程模型:posix
  • Ceres 版本:2.0(我实际上有 git repo,我在几分钟前更新了它:)
  • CPU:Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
4

1 回答 1

1

考虑在 eigen 邮件列表上询问这个问题。这不是 Ceres 求解器问题。

于 2019-01-29T18:38:30.003 回答