sections ディレクティブは,かなり単純.A という処理と B という処理があって,それぞれ独立しているときには両方同時にやっちゃっていいよねってことだ.
使い方は,次のようなかんじになる.
#include <omp.h>
#define N 1000
int main(void)
{
int i;
float a[N];
float b[N];
float c[N];
float d[N];
for (i = 0; i < N; i++) {
a[i] = i * 1.5;
b[i] = i + 22.35;
}
#pragma omp parallel shared(a, b, c, d) private(i)
{
#pragma omp sections nowait
{
#pragma omp section
for (i = 0; i < N; i++)
c[i] = a[i] + b[i];
#pragma omp section
for (i = 0; i < N; i++)
d[i] = a[i] * b[i];
}
}
return 0;
}
結構便利そうだが,この場合は当然セクションの計算量の多いほうに足を引っ張られるので,計算量のバランスは重要だと思う.まあ,セクションの数(今回は2つだが,独立なセクションがあれば3つでも4つでも OK.)を増やせば,あるていど均されるんだろうけど.
参考文献:
OpenMP Tutorial
0 件のコメント:
コメントを投稿