我有一个二维双精度数组,正在被多个进程并行操作。每个进程都操作数组的一部分,在每次迭代结束时,我需要确保所有进程都拥有相同的二维数组副本。
假设数组大小为10*10且有2个进程(或处理器)。进程1(P1)操作2D数组的前5行(总共50个元素),P2操作后5行(总共50个元素)。在每次迭代结束时,我需要P1拥有(自己的前5行+ P2的后5行)。P2应该拥有(P1的前5行+自己的后5行)。希望情景清晰明了。
我正试图使用下面给出的代码进行广播。但我的程序始终以此错误退出:“APPLICATION TERMINATED WITH THE EXIT STRING: Hangup (signal 1)”。
如此问题已经很明确了,我尝试使用Jonathan在这里指出的连续2D内存分配器:MPI_Bcast a dynamic 2d array,但我仍然得到相同的错误。
有人可以帮帮我吗?
我的代码:
假设数组大小为10*10且有2个进程(或处理器)。进程1(P1)操作2D数组的前5行(总共50个元素),P2操作后5行(总共50个元素)。在每次迭代结束时,我需要P1拥有(自己的前5行+ P2的后5行)。P2应该拥有(P1的前5行+自己的后5行)。希望情景清晰明了。
我正试图使用下面给出的代码进行广播。但我的程序始终以此错误退出:“APPLICATION TERMINATED WITH THE EXIT STRING: Hangup (signal 1)”。
如此问题已经很明确了,我尝试使用Jonathan在这里指出的连续2D内存分配器:MPI_Bcast a dynamic 2d array,但我仍然得到相同的错误。
有人可以帮帮我吗?
我的代码:
double **grid, **oldgrid;
int gridsize; // size of grid
int rank, size; // rank of current process and no. of processes
int rowsforeachprocess, offset; // to keep track of rows that need to be handled by each process
/* allocation, MPI_Init, and lots of other stuff */
rowsforeachprocess = ceil((float)gridsize/size);
offset = rank*rowsforeachprocess;
/* Each process is handling "rowsforeachprocess" #rows.
* Lots of work done here
* Now I need to broadcast these rows to all other processes.
*/
for(i=0; i<gridsize; i++){
MPI_Bcast(&(oldgrid[i]), gridsize-2, MPI_DOUBLE, (i/rowsforeachprocess), MPI_COMM_WORLD);
}
第二部分:上面的代码是使用一维分解的拉普拉斯方程并行求解器的一部分,我不想使用Master-worker模型。如果我使用Master-worker模型,我的代码会更容易吗?