Parallel processing 为什么可以';我不能一次打开8个进程吗?

Parallel processing 为什么可以';我不能一次打开8个进程吗?,parallel-processing,mpi,openmpi,message-passing,Parallel Processing,Mpi,Openmpi,Message Passing,我是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); 以及: 但我只得到了8份: Process: 0 Pro

我是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);
以及:

但我只得到了8份:

Process: 0
Procs_num: 1
我希望得到的是:

Process: 0~7 
Procs_num: 8
我猜这是因为在MPI_COMM_世界中没有8个进程,但我无法找出原因,也不知道如何解决它


我希望你能理解我想表达的意思。很多thx

显然你忘了打电话给
MPI\u 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);
}

检查此问题的答案:。您可能安装了多个MPI库,
mpicc
命令来自其中一个,而
mpirun
来自另一个。@GregInozemtsev可能是。我会尝试一下。当某个进程退出而不调用
MPI\u FINALIZE
时,省略
MPI\u FINALIZE
可能会使MPI程序进入未定义状态(通常会崩溃),但这不会导致OP描述的行为。
#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);
}
~/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