ルートノードに送信してから他のすべてのノードに送信するのではなく、ノード間でデータを送信する方法がわからないようです。
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
、数値は1行だけになります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 );
}
}
この問題に取り組む方法について、誰かが私にいくつかの擬似コードを親切に提供してくれませんか。乾杯