0
我對並行處理很新穎。我有一個按順序計算和存儲二維數組元素的例子。我想用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");
}
}
我試圖通過並行外for循環將此轉換爲等效的MPI程序如下: 在這裏,我希望每一個過程以計算值爲每個陣列行和發送輸出數組到根方法,該方法在end會收集所有的數組並將它們組合成單個二維數組。
#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」你能幫我解決這個問題嗎?如果yMax = 1000,我不能將任務交給1000個進程。謝謝 – Max