Я хотел бы использовать общий массив в программе MPI.Мне нужно изменить какой-то кусок общего массива и связаться со всеми рядами.Я пытался использовать MPI_Allgather, но результат не является правильным.Я думаю, это потому, что каждый ранг использует свои локальные упорядоченные [i] , упорядоченные [i + n] , а не глобальные.Как я могу распараллелить это?Какие-либо предложения?Спасибо за вашу помощь.
start = my_rank * (samples/numprocs);
end = (my_rank + 1) * (samples/numprocs);
MPI_Bcast(W, (samples/2)-1, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD);
MPI_Bcast(ordered, samples, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
long int n = 1;
long int a = samples / 2;
for(int j = 0; j < log2(samples); j++){
for(long int i = start; i < end; i++) {
if(!(i & n)) {
complex<double> temp = ordered[i];
long int index = (i * a) % (n * a);
complex<double> Temp = W[index] * ordered[i + n];
//ordered[i] = temp + Temp;
//ordered[i + n] = temp - Temp;
complex<double>first = temp+Temp;
complex<double>second = temp-Temp;
MPI_Allgather(&first,1, MPI_DOUBLE_COMPLEX, &ordered[i],1,MPI_DOUBLE_COMPLEX,MPI_COMM_WORLD);
MPI_Allgather(&second,1, MPI_DOUBLE_COMPLEX, &ordered[i+n],1,MPI_DOUBLE_COMPLEX,MPI_COMM_WORLD);
}
}
n *= 2;
a = a / 2;
}