程序的典型性能瓶颈是什么(C / C ++)
我写过一些涉及大量计算的程序,但是,我发现通过将计算从double
更改为single
浮点运算,它很少,如果有的话,给了我很多性能改进即使我在代码中使用了很多SIMD
指令,程序也会逐块处理数据,而不是逐个处理。
通过将数据从double更改为single,SIMD
单元可以处理两倍的计算单位,并且就可以传输的变量而言,内存带宽也会有所改善,如果不加倍的话。
然而,性能差异几乎无法辨认(有点5%)。
可能的原因是什么?这样做是因为计算(sandy bridge
)在某种程度上受指令限制,因为CPU每个周期只能发出有限数量的指令吗?