openmp建立執行緒中鎖和原子操作效能比較
原子操作:在多程序(執行緒)的作業系統中不能被其它程序(執行緒)打斷的操作就叫原子操作。原子操作是不可分割的。
#include
#include
#include
#include
#define num 2000000
//運算次數
using
namespace std;
//測試原子操作
void
testatomic()
t2 =
clock()
; cout <<
"singlethread, interlockedincrement "
<
": a= "
<< a <<
", time="
<< t2 - t1 << endl;
//此時a為num
//測試多執行緒併發執行下原子操作
t1 =
clock()
;#pragma omp parallel for
for(i =
0; i < num; i++
) t2 =
clock()
; cout <<
"multithread, interlockedincrement "
<< num <<
": a= "
<< a <<
", time="
<< t2 - t1 << endl;
//此時a為2*num
}//測試omplock
void
testomplock()
t2 =
clock()
; cout <<
"singlethread, omp_lock "
<< num <<
": a= "
<< a <<
", time="
<< t2 - t1 << endl;
//此時a為num
//測試多執行緒併發執行下鎖操作
t1 =
clock()
;#pragma omp parallel for
for(i =
0; i < num; i++
) t2 =
clock()
; cout <<
"multithread, omp_lock "
<< num <<
": a= "
<< a <<
", time="
<< t2 - t1 << endl;
//此時a為2*num
omp_destroy_lock
(&mylock)
;//關閉乙個鎖,與omp_init_lock()配對使用
}int
main()
輸出為:
原子操作快於openmp。
平行計算 一 OpenMP
openmp是一種用於共享記憶體並行系統的多執行緒庫,其支援c c fortran,並且目前大多數常用編譯器,如vs內建編譯器 gcc icc等都提供了openmp的相關支援,以gcc為例編譯時只需要新增 fopenmp選項即可完成openmp 的編譯。openmp中包含了一套編譯器偽指令 執行時函...
平行計算入門 openMP
openmp提供了對於並行描述的高層抽象,降低了並行程式設計的難度和複雜度,這樣程式設計師可以把更多的精力投入到並行演算法本身,而非其具體實現細節。對基於資料分集的多執行緒程式設計,openmp是乙個很好的選擇。同時,使用openmp也提供了更強的靈活性,可以較容易的適應不同的並行系統配置。執行緒粒...
OpenMP平行計算PI的值
用vs新建乙個工程後,首先要右鍵專案,屬性 c c 語言,在右邊的對話方塊中openmp支援選擇是 程式 為 include include include static long num steps 100000 double step,pi void main pi step sum clock...