首页 > 解决方案 > MPI如何决定其排名大小

问题描述

我是一个 MPI 初学者,如果我用 c++ 编写这样的代码,系统将如何决定程序将有多少等级?这不像我们在面向对象语言中遵循的逻辑,当你定义一个数组时,你就知道它的大小。他们在 MPI 中使用什么机制让系统决定多少 rank 和整个大小?它灵活吗?由机械力量决定?或者只是在调用时自动生成?

int main(int argc, char *argv[]){   
MPI_Init(NULL, NULL);
int size, rank;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 4)
    master();
else
    slave(rank);
MPI_Finalize();
return 0;}

标签: c++mpicomputer-sciencedistributed-system

解决方案


这是一个很好的参考:

这是一个教程:

这是一个相关的问题

要回答您的问题:

  • Rank 是(逻辑)进程号(如线程 ID)

  • 大小是进程总数(已分配,并行度)

当您使用 MPI_Init 时,请参阅:https ://www.sharcnet.ca/help/index.php/Getting_Started_with_MPI以观察如何设置进程数。

mpirun -n 4 ./parhello

您可以使用“-n N”构造您的 argv[] 数组,并为 MPI_init 调用指定世界大小。

您还可以使用环境变量设置世界大小,

借用另一个问题/答案:

MPI_Comm_size 返回通信器的大小。在我们的示例中,MPI_COMM_WORLD(由 MPI 为我们构建)包含作业中的所有进程,因此此调用应返回作业请求的进程数量。

MPI_Comm_rank 返回进程在通信器中的排名。通信器内部的每个进程都被分配一个从零开始的递增等级。进程的等级主要用于发送和接收消息时的识别目的。

秩用于区分进程。您可能有一个“主”进程(等级 = 0)将消息发送到等级为 1-15 的“从”应用程序。或者您可以使用其他拓扑来划分工作负载。


推荐阅读