当使用固定大小矩阵的`std :: vector`时,在Ivy Bridge上使用AVX的特征段错误

时间:2017-11-03 19:27:07

标签: c++ vectorization eigen eigen3

我想知道这是否是一个已知问题;如果没有,有没有人经历过这个,有没有人设法找到修复?

我在Core i7-3700上的Fedora 25上使用GCC 6.4使用Eigen 3.3.4构建数值计算代码。我的proc / cpuinfo说我应该有AVX。我试过两个版本。构建1:

g++ -std=c++14 -O3 -m64 -mavx

并构建2:

g++ -std=c++14 -O3 -m64 -msse4.2

Build 2运行正常。但是当我尝试构建1时,我在Zero函数中获得了方形固定大小矩阵以及inverse()方法中的段错误。我会对可能发生的事情表示赞赏。

编辑:我忘记了一个非常重要的细节:我实际上使用的是std::vector固定大小的特征矩阵。

1 个答案:

答案 0 :(得分:1)

我使用std::vector固定大小的矩阵这一事实是关键。非常感谢请求最小的例子@rex。在准备示例时,我发现了以下内容。

对于某些大输入大小(包含矩阵的std::vector),Eigen会引发运行时错误,这导致我this站点。按照说明修复了问题。

基本上,std::vector及其标准分配器似乎与固定大小数组操作的矢量化的Eigen对齐要求相混淆。使用Eigen提供的aligned_allocator解决了这个问题。