2
私はこのコードがMPI_Bcast内部のif文
#include <stdio.h>
#include "mpi.h"
int main(int argc, char * argv[]){
int my_rank, p, n;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if(my_rank == 0){
scanf("%d", &n);
}
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Finalize();
}
しかし、このコードについて正しいことを知っています。私は誰かに尋ねたところ、議論に入り、彼はこのコードが完全に間違っていると私に言った。
#include <stdio.h>
#include "mpi.h"
int main(int argc, char * argv[]){
int my_rank, p, n;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if(my_rank == 0){
scanf("%d", &n);
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
else {
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
MPI_Finalize();
}
私はそれが効率的ではないことを知っていますが、なぜ間違っているのか理解できません。 私はすべてのプロセスが以下のプログラムのコピーをとり、それを処理することを理解しています。そのため、すべてがif文の外にあるかのようにMPI_Bcastを使用しますので、 if文の中でMPI_Bcastを使用しますか?
それは完全に間違ったコードのようには見えません:)ちょっと少し違って:) – mko
@mko技術的にその人は私の教授だったので、私は気づいていないことがあるかどうかを確認するように頼んだ。 –
Hmmm ...正直言って、ここでは「完全に間違っている」と言うのは難しいです:(しかし、あなたがすでに知っていれば、私たちに知らせてください)すべてのプロセスは、とにかくMPI_Bcastを呼び出しています。 ) – mko