#pragma omp 指示文名 [指示句[[,]指示句]...]
※原則、指示文には1つの指示文名しか書けない ※指示句は指示節と呼ばれることもある
ブロック内を並列化する
#include <omp.h>
#include <stdio.h>
int main()
{
#pragma omp parallel
{
printf("hello openMP ! \n");
}
return 0;
}
| + | PhenomII 940(4コア)の場合の出力結果 |
※OpenMP指示文にnum_threads(10)とすると並列化数が10となるが、無しでコンパイラにて最適化される
forループを並列化する
#include <stdio.h>
#include <omp.h>
int main(void)
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
int b[10] = {0};
int i;
#pragma omp parallel
{
#pragma omp for
for(i = 0; i < 10; i++){
b[i] = a[i];
printf("i = %d,スレッド番号=%d,スレッド数=%d\n"
,i, omp_get_thread_num(),omp_get_num_threads());
}
}
for(i = 0; i < 10; i++){
printf("b[%d] = %d\n",i,b[i])
}
return 0;
}
| + | PhenomII 940(4コア)の出力結果 |
逐次プログラムを分割して並列処理する
#include <stdio.h>
#include <omp.h>
int main()
{
#pragma omp parallel
#pragma omp sections
{
#pragma omp section
{
printf("section0:スレッド番号 = %d , スレッド数 = %d \n",
omp_get_thread_num(),omp_get_num_threads());
}
#pragma omp section
{
printf("section1:スレッド番号 = %d , スレッド数 = %d \n",
omp_get_thread_num(),omp_get_num_threads());
}
#pragma omp section
{
printf("section2:スレッド番号 = %d , スレッド数 = %d \n",
omp_get_thread_num(),omp_get_num_threads());
}
}
return 0;
}
| + | PhenomII 940(4コア)での実行結果 |
参考文献