配列を作成し、OpenMP を使用してその配列の各位置に値を割り当てるプログラムを作成しようとしています。配列がどの位置を担当するかを指定したいことを除けば、それは些細なことです。
たとえば、長さが 80 で 8 スレッドの配列がある場合、スレッド 0 が位置 0 ~ 9、スレッド 1 ~ 10 ~ 19 などにのみ書き込むようにします。
私はOpenMPに非常に慣れていないので、次のことを試しました:
#include <omp.h>
#include <stdio.h>
#define N 80
int main (int argc, char *argv[])
{
int nthreads = 8, tid, i, base, a[N];
#pragma omp parallel
{
tid = omp_get_thread_num();
base = ((float)tid/(float)nthreads) * N;
for (i = 0; i < N/nthreads; i++) {
a[base + i] = 0;
printf("%d %d\n", tid, base+i);
}
}
return 0;
}
ただし、このプログラムは、予想どおり、すべての位置にアクセスするわけではありません。出力は実行するたびに異なります。たとえば、次のようになります。
4 40
5 51
5 52
5 53
5 54
5 55
5 56
5 57
5 58
5 59
5 50
4 40
6 60
6 60
3 30
0 0
1 10
ディレクティブが欠落していると思いますが、それがどれなのかわかりません。