1

C++ eigen 库为不同的架构进行向量化,如 SSE、NEON 等。在他们的文档中,他们提到,Eigen 向量化不依赖于编译器。但是,如果使用 -O3 标志启用了矢量化标志,则大多数现代编译器(如 gcc)会自动进行矢量化。

所以我的问题是,当编译器自动为我们执行此操作时,为什么 Eigen 或任何其他库会执行硬编码矢量化?

4

1 回答 1

3

确实,编译器在自动矢量化方面越来越好,对于像 2*A-4*B 这样的基本系数运算,像 Eigen 这样的库不能比最近的编译器做得更好。然而,对于稍微复杂的表达式,如矩阵乘积、归约、转置、幂等,编译器无法做太多事情。另一方面,Eigen 可以利用表达式语义的高级知识来显式地向量化它们。此外,复杂的标量类型不会被编译器向量化。您可以通过禁用 Eigen 的显式矢量化 (-DEIGEN_DONT_VECTORIZE) 自行检查。

于 2016-07-08T09:31:39.500 回答