【发布时间】:2012-12-19 11:01:03
【问题描述】:
我似乎无法弄清楚如何在节点之间发送数据,而不是将其发送到根节点,然后将其发送到所有其他节点。
如果我有 N 节点,每个节点都有一个像这样创建的数组,其中 SIZE 是节点的总数,并且目前假设它是一个预处理器常量(如果可能,避免像瘟疫一样的 malloc) .另外,不用说rank是当前节点的rank。
int dummy [SIZE][5];
int i, n;
for (n = 0; n < SIZE; n++){
for (i = 0; i <5; i++){
if ( n == rank ){
dummy [ n ][ i ] = 123;
这为每个节点提供了一个几乎为空的维度数组SIZE * 5,只有一行数字123。现在我想获取所有这些单独的数组并“合并”它们。我唯一能想到的是以下内容,但我确信这会导致死锁,即使我确实费心检查我的源节点是否不等于目标节点:
for ( i = 0; i < SIZE; i++ ){
for ( j = 0; j < SIZE; j++ ){
MPI_Send ( &dummy [ i ], 5, MPI_INT, j, 123, MPI_COMM_WORLD );
}
}
for ( i = 0; i < SIZE; i++ ){
for ( j = 0; j < SIZE; j++ ){
MPI_Recv ( &dummy [ j ], 5, MPI_INT, i, 123, MPI_COMM_WORLD );
}
}
谁能给我一些关于如何解决这个问题的伪代码。干杯
【问题讨论】: