【发布时间】:2017-06-12 20:02:47
【问题描述】:
我对并行处理很陌生。我有一个以顺序方式计算和存储二维数组元素的示例。我想使用 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");
}
}
我尝试通过并行化外部 for 循环将其转换为等效的 MPI 程序,如下所示: 在这里,我希望每个进程计算每个数组行的值并将输出数组发送到根进程,该进程最后将收集所有数组并将它们组合成单个二维数组。
#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();
}
但是当我编译程序并等待很长时间时,它仍然没有给出任何结果。它没有显示错误。 我尝试了很长一段时间,并搜索了任何解决方案但无法找到。任何帮助都感激不尽。谢谢
【问题讨论】:
标签: c arrays parallel-processing mpi