我似乎无法弄清楚如何在节点之间发送数据,而不是将其发送到根节点,然后将其发送到所有其他节点。
如果我的N
每个节点都有一个这样创建的数组,那么SIZE
节点的总数在哪里,目前假设它是一个预处理器常量(如果可能,避免malloc
像瘟疫一样)。另外,不言而喻的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 );
}
}
有人可以为我提供一些关于如何解决这个问题的伪代码。干杯