我有一個程序嚴重縮小到多個線程,但理論上它應該線性縮放:它是一種計算,可以分成更小的塊,不需要系統調用,庫調用,鎖定,等等。使用四個線程運行的速度只有使用單線程(在四核系統上)運行速度的兩倍左右,而我期望的數字更接近四倍。多線程性能和性能測試
帶pthreads,C++ 0x線程和OpenMP的實現的運行時間同意。
爲了查明原因,我嘗試了gprof(無用)和valgrind(我沒有看到任何明顯的東西)。如何有效衡量導致經濟放緩的因素?關於其可能原因的任何通用想法?
- 更新 -
計算包括蒙特卡羅積分我注意到,不合理的時間量花在生成隨機數。雖然我不知道爲什麼會發生這種情況,但我注意到隨機數發生器不可重入。使用互斥鎖時,運行時間會爆炸。在檢查其他問題之前,我會重新實現這個部分。
我確實重新實現了確實提高性能的抽樣類。其餘的問題實際上是CPU緩存的爭用(由Evgeny懷疑,它被cachegrind透露)。