繁体   English   中英

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

[英]Performance of OpenMP Parallel Programming in C

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

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

OMP_NUM_THREADS

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

$ export OMP_NUM_THREADS=no_of_threads

运行程序的性能是:

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之后,我也无法理解性能的提升。我知道每个增加的线程都有一个开销,所以为什么性能仍在增加..

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

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

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM