OpenMP建立執行緒中的鎖及原子操作效能比較

2021-05-24 11:37:54 字數 1720 閱讀 5299

多核程式設計中的任務隨機競爭模式的概率分析

多核程式設計中的任務分組競爭模式

多核程式設計中的負載平衡難題

多核程式設計中的鎖競爭難題

多核程式設計的幾個難題及其應對策略(難題一)

openmp並行程式設計(二)

openmp並行程式設計(一)

雙核cpu上的快速排序效率

原子操作選用interlockedincrement來進行測試,

對每種鎖和原子操作,都測試在單任務執行和多工執行2000000次加鎖解鎖操作所消耗的時間。

測試的詳細**見後面。

測試機器環境: intel 2.66g 雙核cpu 機器一台

測試執行結果如下:

singlethread, interlockedincrement 2,000,000: a = 2000000, time = 78

multithread, interlockedincrement 2,000,000: a = 2000000, time = 156

singlethread, critical_section 2,000,000:a = 2000000, time = 172

multithread, critical_section, 2,000,000:a = 2000000, time = 3156

singlethread,omp_lock 2,000,000:a = 2000000, time = 250

multithread,omp_lock 2,000,000:a = 2000000, time = 1063

在單任務運**況下,所消耗的時間如下:

原子操作                 78ms

windows criticalsection 172ms

openmp 的lock操作        250ms

因此從單任務情況來看,原子操作最快,windows criticalsection次之,openmp庫帶的鎖最慢,但這幾種操作的時間差距不是很大,用鎖操作比原子操作慢了2~3倍左右。

在多個任務執行的情況下,所消耗的時間如下:

原子操作                 156ms

windows criticalsection 3156ms

openmp 的lock操作        1063ms

在多工運**況下,情況發生了意想不到的變化,原子操作時間比單任務操作時慢了一倍,在兩個cpu上執行比在單個cpu上執行還慢一倍,真是難以想象,估計是任務切換開銷造成的。

windows criticalsection則更離譜了,居然花了3156ms,是單任務執行時的18倍多的時間,慢得簡直無法想象。

openmp的lock操作比windows criticalsection稍微好一些,但也花了1063ms,是單任務時的7倍左右。

由此可以知道,在多核cpu的多工環境中,原子操作是最快的,而openmp次之,windows criticalsection則最慢。

同時從這些鎖在單任務和多工下的效能差距可以看出,,多核cpu上的程式設計和以往的單核多工程式設計會有很大的區別。

需要說明的是,本測試是一種極端情況下的測試,鎖住的操作只是乙個簡單的加1操作,並且鎖競爭次數達200萬次之多,在實際情況中,一由於任務中還有很多不需要加鎖的**在執行,實際情況中的效能會比本測試的效能好很多。

測試**如下:

OpenMP建立執行緒中的鎖及原子操作效能比較 5

openmp建立執行緒中的鎖及原子操作效能比較 相關文件連線 多核程式設計中的任務隨機競爭模式的概率分析 多核程式設計中的任務分組競爭模式 多核程式設計中的負載平衡難題 多核程式設計中的鎖競爭難題 多核程式設計的幾個難題及其應對策略 難題一 openmp 並行程式設計 二 openmp 並行程式設計...

OpenMP建立執行緒中的鎖及原子操作效能比較

openmp建立執行緒中的鎖及原子操作效能比較 相關文件連線 多核程式設計中的任務隨機競爭模式的概率分析 多核程式設計中的任務分組競爭模式 多核程式設計中的負載平衡難題 多核程式設計中的鎖競爭難題 多核程式設計的幾個難題及其應對策略 難題一 openmp 並行程式設計 二 openmp 並行程式設計...

OpenMP 中的執行緒任務排程

openmp中任務排程主要針對並行的for迴圈,當迴圈中每次迭代的計算量不相等時,如果簡單地給各個執行緒分配相同次數的迭代,則可能會造成各個執行緒計算負載的不平衡,影響程式的整體效能。如下面的 中,如果每個執行緒執行的任務數量平均分配,有的執行緒會結束早,有的執行緒結束晚 1 include2 in...