[解決済み] MPI_Send による int 配列の送信
2022-02-05 01:57:34
質問
MPI初心者です。
int
配列は
MPI_Send
を別プロセスに転送します。
// Code example
int main(int argc, char ** argv)
{
int * array;
int tag=1;
int size;
int rank;
MPI_Status status;
MPI_Init (&argc,&argv);
MPI_Comm_size (MPI_COMM_WORLD,&size);
MPI_Comm_rank (MPI_COMM_WORLD,&rank);
if (rank == 0)
{
array = malloc (10 * sizeof(int)); // Array of 10 elements
if (!array) // error checking
{
MPI_Abort (MPI_COMM_WORLD,1);
}
MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
}
if (rank == 1)
{
MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
// more code here
}
MPI_Finalize();
// More code here
3つほどお伺いしたいことがあります。
- 別のプロセスランクにアレイを送信するのは安全な方法ですか?
-
の構文的に正しい使い方ですか?
MPI_Send()
とMPI_Recv()
? - あまり手間をかけずに配列を送受信する良い方法はないでしょうか?
どんなことでもご相談ください。
解決方法は?
配列を動的に確保するのであれば、送受信はそうなります。
MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
そして
MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
(ただし、配列は
array
であって
&array
)
コメントにもあるように、MPIの理解は問題ないようですが、C言語のポインタの使い方を見直すとよいでしょう。
編集:Gillesが言及したように、配列にデータを受信するすべてのプロセスは、それらのためにメモリも割り当てる必要があります。(多分、最初にデータのサイズを送信して、受信者が配列を割り当てるサイズを知ることができます? これを行うには他の方法がありますが、これは簡単な説明です)
関連
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない