當前位置:才華齋>計算機>作業系統>

Linux下要如何進行openmp多執行緒程式設計

作業系統 閱讀(3W)
  Linux下要如何進行openmp多執行緒程式設計

關鍵語法:

Linux下要如何進行openmp多執行緒程式設計

  程式碼如下:

#inlcude 《omp.h》

#pragma omp parallel for

#pragma omp for reduction(+: 變數)

#pragma omp critical//鎖

{

}

#pragma omp parallel for private(x,y)//每個執行緒都獨立拷貝x, y變數,互不干擾,如果不設預設是共享變數

#pragma omp parallel for schedule(static/dynamic/guided, k)//總工作量劃分成n/k塊,再多執行緒排程

#pragma omp parallel sections

{

#pragma omp section//要保證幾個section下的函式之間沒有變數依賴

。。。

#pragma omp section

。。。

}

#pragma omp parallel

{

。();

#pragma omp master/single //保證只有主執行緒/某個執行緒能訪問下面的函式,區別是使用master沒有barrier珊障,single的話先完成的執行緒等待沒完成的執行緒

{

}

}《/p》 《p》#pragma omp barrier/nowait //強制設定珊障/無需等待,如果後續函式對前面的多執行緒沒有依賴,即可使用nowait

#pragma omp parallel for firstprivate(變數)/lastprivate(變數) //為每個多執行緒賦初值/出多執行緒回到主執行緒時賦值供主執行緒使用

還有就是OpenMP的:

程式碼如下:

int omp_get_num_threads(); //獲取當前使用的執行緒個數

int omp_get_num_threads(2/3/。。。)//設定要使用的執行緒個數

nt omp_get_thread_num(void);//返回當前執行緒號

int omp_get_num_procs(void);//返回可用的處理核個數

ubuntu下,無需加《omp.h》標頭檔案,只需在編譯的時候增添-fopenmp即可。

例如:emacs操作命令如下

程式碼如下:

emacs omp.c《/p》 《p》#include 《stdio.h》

int main()

{

int rank, size;

#pragma omp parallel num_thread(3) private(rank) //num_threads用來控制執行緒數量

//或者使用omp_set_num_threads(3);《/p》 《p》 {

rank = omp_get_thread_num();

size = omp_get_num_threads();

printf(“using %d of %d now.n”, rank, size);

}

return 0;

}《/p》 《p》ctrl+x s

alt+x compile

gcc -fopenmp -o omp omp.c

alt+shift+1 。/omp