gpt4 book ai didi

c++ - C 中 OpenMP 并行编程的性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:47 25 4
gpt4 key购买 nike

我从一本书中获得帮助,使用 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 个后性能也会增加。我知道每个增加的线程都有开销,那么为什么性能仍然在增加..

谁能给我详细解释一下。

最佳答案

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

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


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

关于c++ - C 中 OpenMP 并行编程的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com