为什么我一次不能打开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!

+4

检查这个问题的答案:HTTP: //stackoverflow.com/questions/4039608/why-do-all-my-open-mpi-processes-have-rank-0。您可能安装了多个MPI库,并且'mpicc'命令来自一个,'mpirun'来自另一个。 – 2012-08-11 05:46:28

+0

@GregInozemtsev可能是。我会尝试。 – Peiyun 2012-08-11 06:19:13

显然,你忘了打电话给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