我正在尝试创建一个程序来创建一个数组,并使用 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
我想我错过了一个指令,但我不知道它是哪一个。