Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 多线程性能和分析_Multithreading_Performance - Fatal编程技术网

Multithreading 多线程性能和分析

Multithreading 多线程性能和分析,multithreading,performance,Multithreading,Performance,我有一个程序可以很好地扩展到多个线程,尽管从理论上讲,它应该可以线性扩展:它是一个计算,可以分割成更小的块,不需要系统调用、库调用、锁定等。使用四个线程运行的速度只有使用单个线程运行的速度(在四核系统上)的两倍左右,而我预计这个数字会快四倍 使用pthreads、C++0x线程和OpenMP的实现的运行时是一致的 为了查明原因,我尝试了gprof(无用)和valgrind(我没有看到任何明显的东西)。我如何有效地对导致经济放缓的原因进行基准测试?关于其可能的原因有什么一般性的想法吗 -更新- 计

我有一个程序可以很好地扩展到多个线程,尽管从理论上讲,它应该可以线性扩展:它是一个计算,可以分割成更小的块,不需要系统调用、库调用、锁定等。使用四个线程运行的速度只有使用单个线程运行的速度(在四核系统上)的两倍左右,而我预计这个数字会快四倍

使用pthreads、C++0x线程和OpenMP的实现的运行时是一致的

为了查明原因,我尝试了gprof(无用)和valgrind(我没有看到任何明显的东西)。我如何有效地对导致经济放缓的原因进行基准测试?关于其可能的原因有什么一般性的想法吗

-更新-

计算涉及蒙特卡罗积分,我注意到生成随机数花费了不合理的时间。虽然我还不知道为什么这会发生在四个线程上,但我注意到随机数生成器是不可重入的。使用互斥体时,运行时间会爆炸。在检查其他问题之前,我将重新实现此部分


我重新实现了采样类,这确实大大提高了性能。事实上,剩下的问题是CPU缓存的争用(正如Evgeny怀疑的那样,cachegrind揭示了这一点)。

您可以使用oprofile。或者一个穷人的伪分析器:在gdb下运行程序,停止它,看看它停止的地方。“valgrind--tool=cachegrind”将向您展示CPU缓存的使用效率

蒙特卡罗积分似乎是一种内存非常密集的算法。尝试估算内存带宽的使用情况。它可能是程序性能的限制因素。另外,如果您的系统只有两个内核,并且具有超线程,那么与2个线程相比,4个线程的运行速度应该不会快很多