为什么库需要硬编码矢量化而不是编译器自动矢量化

时间:2016-07-07 16:20:53

标签: c++ optimization vectorization eigen auto-vectorization

C ++特征库为不同的体系结构进行矢量化,如SSE,NEON等。在他们的文档中,他们提到,特征向量化不依赖于编译器。但是,如果使用-O3标志启用了矢量化标志,那么像gcc这样的现代编译器会自动进行矢量化。

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

1 个答案:

答案 0 :(得分:2)

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