OpenMP平行計算的使用5

2021-10-19 06:56:03 字數 1569 閱讀 5714

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...