[解決済み】MPI通信でMPI_Bcastを使用する場合
2022-02-09 12:37:35
質問
MPI_Bcastを使ってルートノードから他の全ノードへメッセージをブロードキャストしようとしています。しかし、このプログラムを実行するといつも最初のほうでハングしてしまいます。何が問題なのか、誰か知っていますか?
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
int rank;
int buf;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0) {
buf = 777;
MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
else {
MPI_Recv(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
printf("rank %d receiving received %d\n", rank, buf);
}
MPI_Finalize();
return 0;
}
解決するには?
これは、MPIを初めて使う人がよく混乱する原因です。 を使うわけではありません。
MPI_Recv()
を使用して、ブロードキャストで送信されたデータを受信します。
MPI_Bcast()
.
例えば、あなたが欲しいのはこれです。
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
int rank;
int buf;
const int root=0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == root) {
buf = 777;
}
printf("[%d]: Before Bcast, buf is %d\n", rank, buf);
/* everyone calls bcast, data is taken from root and ends up in everyone's buf */
MPI_Bcast(&buf, 1, MPI_INT, root, MPI_COMM_WORLD);
printf("[%d]: After Bcast, buf is %d\n", rank, buf);
MPI_Finalize();
return 0;
}
MPI集団通信の場合。 全員 BcastやAllreduceなどを呼び出す必要があります。 (Bcastルーチンに「ルート」つまり送信者を指定するパラメータがあるのはこのためです。送信者だけがbcastを呼べば、このパラメータは必要ありません)。 受信者も含めて全員がブロードキャストを呼び出します。受信者はただ受信を投稿するだけではありません。
この理由は、集団的操作は通信に参加する全員を巻き込むことができるので、起こりたいこと(全員が1つのプロセスのデータを取得する)を、むしろ どのように そのため、通信パターンを最適化する余地があります(例えば、ツリーベースの階層型通信で {コード ステップではなく {コード {コード Pプロセスのステップ)。
関連
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み] struct has no member named
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み] C言語でのブーリアン値の使用
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?