簡體   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