Я использую openmp в своем проекте. У меня проблемы с кодом, потому что я не могу записывать данные в двумерный массив. Я абстрагирую алгоритм и показываю простую программу следующим образом:
#include <omp.h>
#include <stdio.h>
int main(){
int i,tmp;
int cnt[2]={0};
int reg[2][5000]={0};
omp_set_num_threads(32);
#pragma omp parallel for private(i,tmp) shared(reg, cnt)
for(i=0;i<10000;i++)
{
if(i%2==1)
{
#pragma omp atomic read
tmp=cnt[1];
if(tmp<5000)
{
#pragma omp atomic write
reg[1][tmp]=i;
#pragma omp atomic
cnt[1]++;
}
}
else{
#pragma omp atomic read
tmp=cnt[0];
if(tmp<5000)
{
#pragma omp atomic write
reg[0][tmp]=i;
#pragma omp atomic
cnt[0]++;
}
}
}
printf("%d\t%d\n", cnt[0], cnt[1]);
for(i=0;i<100;i++)
{
printf("%d\t%d\n", reg[0][i], reg[1][i]);
}
return 0;
}
reg [0] должен содержать только четное число, а reg [1] должен содержать только нечетное число. Но в моем результате многие позиции в реге равны нулю. Я подозреваю, что он не записывает данные в рег. Как исправить код?