0

我是 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 个进程,但我无法弄清楚原因,也不知道如何解决它。

我希望你能抓住我想要表达的东西。很多谢谢!

4

1 回答 1

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
于 2012-08-11T10:46:48.057 回答