代码之家  ›  专栏  ›  技术社区  ›  Valentin Mercier

Ubuntu上的MPI代码只使用了一个处理器

  •  2
  • Valentin Mercier  · 技术社区  · 7 年前

    我正在尝试学习使用开放MPI的并行计算。我在MacBook Pro上使用Ubuntu 16引导。

    我已安装OpenMP并尝试运行 hello_world

    #include <mpi.h>
    #include <stdio.h>
    
    int main(int argc, char** argv) {
    // Initialize the MPI environment
    MPI_Init(NULL, NULL);
    
    // Get the number of processes
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    
    // Get the rank of the process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    
    // Get the name of the processor
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);
    
    // Print off a hello world message
    printf("Hello world from processor %s, rank %d"
           " out of %d processors\n",
           processor_name, world_rank, world_size);
    
    // Finalize the MPI environment.
    MPI_Finalize();
    }
    

    我用它编译没有问题 mpicc 但当我尝试启动它时,我得到了相同的结果 ./hello_world -n 4 ./hello_world -n 2 , ./hello_world -np 4 等等

    我不明白为什么它不能在几个处理器上运行。。。我是否启动错误,或者是我的配置还是其他什么?

    1 回复  |  直到 7 年前
        1
  •  7
  •   joaovictortr    7 年前

    mpirun mpiexec ,这样MPI可以生成所需数量的进程。假设您的程序在文件hello中。c、 您可以按如下方式编译和运行它:

    mpicc -o hello hello.c
    mpirun -np 4 ./hello
    

    其中应显示以下示例输出:

    Hello world from processor sagan, rank 1 out of 4 processors
    Hello world from processor sagan, rank 2 out of 4 processors
    Hello world from processor sagan, rank 3 out of 4 processors
    Hello world from processor sagan, rank 0 out of 4 processors
    

    正如您所做的那样,独立运行程序只会生成一个进程,因为hello程序不会解析标志 -n 你正在给它。 mpirun -np