[英]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.