我正在研究Eigen测试套件,我注意到有太多的内置函数直接指定了用于该特定体系结构的确切指令,而不是让编译器自由决定哪个是该源代码的最佳指令。任何人都可以帮助我如何禁用与Eigen一起使用内置插件?
答案 0 :(得分:1)
要禁用显式向量化并查看编译器对自动向量化的作用,可以使用-DEIGEN_DONT_VECTORIZE
进行编译。
我还建议使用-DNDEBUG
进行编译(一旦确定您的代码在功能上是正确的)。有时-ffast-math
或至少-fassociative-math
可以帮助编译器找到更好的优化机会。
虽然自动矢量化肯定会变得更好,但我不会指望任何魔法(always compare the generated assembly - 和基准!)
此外,如果编译器找到功能相同的指令,则严格限制使用与使用的内在函数相对应的指令: https://godbolt.org/g/bEJNXZ