我知道这份代码是正确的。
但是这段代码怎么办呢?我向某人询问并且我们进行了一番辩论,他告诉我这段代码完全是错的。
#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();
}
我知道这不是高效的,但我不明白为什么它是错误的。 我理解每个进程都会复制以下程序并对其进行操作,因此所有进程将像MPI_Bcast在if语句外一样使用它,所以有人能解释一下当我在if语句中使用MPI_Bcast时到底发生了什么吗?