C语言中OpenMP并行编程的性能

Kum*_*lok 5 c c++ parallel-processing openmp

Pi使用OpenMP 编写了一个计算C程序,从书中获取帮助.我相信这个程序的性能取决于所使用的处理器.

在我的情况下,我使用环境变量通过增加处理器或线程的数量来检查并行性的性能(我不确定什么是正确的...请纠正我)

OMP_NUM_THREADS
Run Code Online (Sandbox Code Playgroud)

我有一个四核处理器,所以我使用(no_of_threads从1改为10):

$ export OMP_NUM_THREADS=no_of_threads
Run Code Online (Sandbox Code Playgroud)

运行程序的性能是:

1 --- 0m11.036s

2 --- 0m5.554s

3 --- 0m3.800s

4 --- 0m3.166s

5 --- 0m3.376s

8 --- 0m3.042s

10 --- 0m2.960s

15 --- 0m2.957s

我可以理解性能提升到4,因为系统上有4个处理器.但即使在线程数超过4之后,我也无法理解性能的提升.我知道每个增加的线程都有一个开销,所以为什么性能仍在增加..

有人可以详细向我解释一下.

Kon*_*lph 3

您可能有一个支持硬件线程的处理器(英特尔称之为超线程)。

这基本上意味着每个内核都有两个指令缓存,因此可以比平常更有效地执行两个交织线程。如果线程经常必须等待内存,这一点尤其明显:通常,核心在等待内存1时就会停止。支持超线程的核心可以在等待期间执行来自其他线程的指令。


1未考虑指令重排序和预取。