我有一个程序严重缩小到多个线程,但理论上它应该线性缩放:它是一种计算,可以分成更小的块,不需要系统调用,库调用,锁定,等等。使用四个线程运行的速度只有使用单线程(在四核系统上)运行速度的两倍左右,而我期望的数字更接近四倍。多线程性能和性能测试
带pthreads,C++ 0x线程和OpenMP的实现的运行时间同意。
为了查明原因,我尝试了gprof(无用)和valgrind(我没有看到任何明显的东西)。如何有效衡量导致经济放缓的因素?关于其可能原因的任何通用想法?
- 更新 -
计算包括蒙特卡罗积分我注意到,不合理的时间量花在生成随机数。虽然我不知道为什么会发生这种情况,但我注意到随机数发生器不可重入。使用互斥锁时,运行时间会爆炸。在检查其他问题之前,我会重新实现这个部分。
我确实重新实现了确实提高性能的抽样类。其余的问题实际上是CPU缓存的争用(由Evgeny怀疑,它被cachegrind透露)。