在不讨论过早优化的情况下,我有几个关于g++或其他编译器在选择相关编译器标志时如何处理SSE优化的问题:
编译器在尝试优化时会合并1、2和3吗?
对于各种SSE优化编译器来说,听到人们对此的想法将是很有趣的。
编辑:我主要是问关于g++,但其他的“主流”编译器感兴趣。我也主要讨论浮点运算。
发布于 2017-07-22 15:42:56
根据我的经验,编译器在三年前对向量化做了真正的改进。目前,您的所有示例都将被高效地向量化。此外,如果您有机会使用Intel的编译器,您将得到一个巨大的速度,它的报告模式将为您提供有关它应用的优化的更多信息。
在我的日常生活中,我已经看到您可以拥有最疯狂的代码,但是对于计算部分,您应该帮助编译器并使用C方法提取指针并执行循环:
float * pa = whatever; // data must be contigious
float * pb = whatever;
for (int i=0; i <n; ++i)
{
pa[I] = pa[i]*pb[i]; // example
}现在我们也有了OpenMP 4.5,它提供矢量化指令。。这将只比手写解决方案慢10% .因此,我不建议今天转移到本质,除非在非常具体的情况下,#pragma将无法工作。
https://stackoverflow.com/questions/45256252
复制相似问题