为什么我一次不能打开8个进程?
问题描述:
我是MPI的初学者。当我编写第一个程序时,我遇到了一个棘手的问题。为什么我一次不能打开8个进程?
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个进程,但是我无法弄清楚原因,也不知道如何解决这个问题。
我希望你能抓住我想表达的意思。许多thx!
答
显然,你忘了打电话给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个fifferents排名:
~/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
+1
当没有调用MPI_FINALIZE而退出时,省略'MPI_FINALIZE'可能导致MPI程序进入未定义状态(通常会崩溃),但它不会导致OP描述的行为。 – 2012-08-11 19:51:56
检查这个问题的答案:HTTP: //stackoverflow.com/questions/4039608/why-do-all-my-open-mpi-processes-have-rank-0。您可能安装了多个MPI库,并且'mpicc'命令来自一个,'mpirun'来自另一个。 – 2012-08-11 05:46:28
@GregInozemtsev可能是。我会尝试。 – Peiyun 2012-08-11 06:19:13