2008年11月10日月曜日

OpenMP 入門 #4

林檎生活100: OpenMP 入門 #3の続き.今回は,sections ディレクティブについて.

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 件のコメント: