Я довольно новичок в параллельной обработке. У меня есть пример вычисления и хранения элементов 2D-массива последовательным образом. Я хотел преобразовать это в параллельную программу, используя MPI.Итерирование 2D-массива с использованием параллельной обработки MPI
Ниже приведен код для последовательной программы.
#include <stdio.h>
int x,y,xMax=10,yMax=10;
int main()
{
int arr[yMax][xMax];
for(y =0; y<yMax;x++)
{
for (x=0;x<xMax;x++)
{
arr[y][x]=x+y;
printf("%d",arr[y][x]);
}
printf("\n");
}
}
Я попытался преобразовать это в эквивалентную программу MPI с помощью распараллеливания внешнего цикл следующим образом: Здесь я хочу каждый процесс для вычисления значений для каждой строки массива и передавать выходной массив корневого процесса, который на end будет собирать все массивы и объединять их в один 2D-массив.
#include <stdio.h>
#include <mpi.h>
int x,y,xMax=10,yMax=10,size,rank;
int main()
{
int arr[xMax];
int arrall[yMax][xMax];
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
for(y =0+rank; y<yMax;y=y+size)
{
for (x=0;y<xMax;x++)
{
arr[y][x]=x+y;
}
MPI_Send(arr,xMax,MPI_INT,0,0,MPI_COMM_WORLD);
}
if(rank==0)
{
MPI_Gather(arr,xMax,MPI_INT,&arrall,xMax*yMax,MPI_INT,0,MPI_COMM_WORLD);
}
MPI_Finalize();
}
Но когда я скомпилирую программу и жду долгое время, но она по-прежнему не дает никакого результата. и он не показывает ошибок. Я пробую это довольно долго и искал любое решение, но не смог его найти. Любая помощь будет высоко ценится. Спасибо
спасибо! каков будет размер выпуска? будет ли это 2D-массив? – Max
'arrall' будет заполнен элементами' size * xMax'. «Выход» будет соответствовать расположению данных 2D-массива. – Zulan
«Вы должны убедиться, что размер == yMax» вы можете помочь мне преодолеть эту проблему? Я не могу дать задачу 1000 процессам, если yMax = 1000. Спасибо – Max