<< 6 >>
インテル® C/C++ コンパイラー OpenMP* 活用ガイド
デュアルコア・マルチコア対応アプリケーション開発A
OpenMP* のもっとも基本的な考え方は、プログラム中の計算負荷が大きなループに対して、その並列処理のため
の「指示」をコンパイラーに行うというものです。OpenMP* マルチスレッド・コンパイルをサポートするコンパイルシステ
ムは、この指示に従って並列処理の適用をコードに対して行います。実際には OpenMP* の適用はループについてだ
け行うものではありませんが以下の例では主に for ループを並列化する事例を中心に説明を行います。
図.5 OpenMP* プログラミングの概要
#pragma omp parallel if (n>limit) default (none)
shared (n,a,b,c,x,y,z) private(f,i,scale)
{
f = 1.0;
#pragma omp for nowait
for (i=0; i<n; i++)
z[i] = x[i] + y[i];
#pragma omp for nowait
for (i=0; i<n; i++)
a[i] = b[i] + c[i];
#pragma omp barrier
scale = sum(a, 0, n) + sum(z, 0, n) + f;
} /** Enf of parallel region **/
すべてのスレッドが実行
並列ループ
(ワークシェアリング)
並列ループ
(ワークシェアリング)
同期処理
すべてのスレッドが実行
並列実行領域(Parallel Region)