我是MPI的初学者。当我编写第一个程序时,我遇到了一个棘手的问题。
MPI_Init(&argc, &argv) ;
MPI_Comm_rank( MPI_COMM_WORLD, &rank) ;
MPI_Comm_size( MPI_COMM_WORLD, &size) ;
printf("Process: %d\n", rank);
printf("Procs_num: %d\n", size);
和
mpicc main.c -o main
mpirun -np 8 main
但我得到的只有8个重复:
Process: 0
Procs_num: 1
我期望得到的是:
Process: 0~7
Procs_num: 8
我想这是因为MPI_COMM_WORLD中没有8个进程,但我无法弄清楚原因并且不知道如何解决它。
我希望你能抓住我想要表达的东西。很多人!!
答案 0 :(得分:0)
显然你忘了拨打MPI_Finalize
这是正确的代码:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main (int argc, char *argv[]) {
int rank, size;
MPI_Init(&argc, &argv) ;
MPI_Comm_rank( MPI_COMM_WORLD, &rank) ;
MPI_Comm_size( MPI_COMM_WORLD, &size) ;
printf("Process: %d\n", rank);
printf("Procs_num: %d\n", size);
MPI_Finalize();
return(0);
}
然后你获得了8个不同的等级:
~/mpi_tests/examples > mpirun -np 8 ~/mpi_tests/examples/t
Process: 4
Procs_num: 8
Process: 5
Procs_num: 8
Process: 0
Procs_num: 8
Process: 1
Procs_num: 8
Process: 7
Procs_num: 8
Process: 2
Procs_num: 8
Process: 3
Procs_num: 8
Process: 6
Procs_num: 8