關鍵語法:
程式碼如下:
#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