MPI - 在障碍后尝试打印广播变量,显示其他一些变量
MPI - Trying print broadcast variable after the barrier, showing some other variable
我是从 MPI 学习开始的。我在 MPI_Broadcast 之后使用了 MPI_Barrier,我在其中向所有进程广播一个变量。但是当我打印广播变量时,它是一些来自内存而不是广播的值。不知道我哪里做错了。有什么建议吗
void main(int argc, char *argv[]){
int x, comm_sz, my_rank;
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if(my_rank == 0){
x = strtol(argv[1], NULL, 10);
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
MPI_Finalize();
}
我只想把这个值广播到所有进程后做一些操作
错误在这方面
if(myRank == 0){
x = strtol(argv[1], NULL, 10);
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
MPI_Bcast 应该是 运行 像这样的所有进程,否则 x 的值将永远不会填充到非根(rank = = 0) 个进程。
if(myRank == 0){
x = strtol(argv[1], NULL, 10);
}
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
由于 MPI_Bcast 是阻塞的,所以对 MPI_Barrier 的调用变得不必要,因为给定的进程不会继续进行,直到所述进程收到 x.
的广播值
我是从 MPI 学习开始的。我在 MPI_Broadcast 之后使用了 MPI_Barrier,我在其中向所有进程广播一个变量。但是当我打印广播变量时,它是一些来自内存而不是广播的值。不知道我哪里做错了。有什么建议吗
void main(int argc, char *argv[]){
int x, comm_sz, my_rank;
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if(my_rank == 0){
x = strtol(argv[1], NULL, 10);
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
MPI_Finalize();
}
我只想把这个值广播到所有进程后做一些操作
错误在这方面
if(myRank == 0){
x = strtol(argv[1], NULL, 10);
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
MPI_Bcast 应该是 运行 像这样的所有进程,否则 x 的值将永远不会填充到非根(rank = = 0) 个进程。
if(myRank == 0){
x = strtol(argv[1], NULL, 10);
}
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
if(my_rank != 0){
printf("x is %d\n", x);
}
由于 MPI_Bcast 是阻塞的,所以对 MPI_Barrier 的调用变得不必要,因为给定的进程不会继续进行,直到所述进程收到 x.
的广播值