MPI如何决定其排名大小

时间:2018-05-02 22:33:08

标签: c++ mpi computer-science distributed-system

我是MPI的初学者,如果我在c ++中编写这样的代码,那么系统将如何杀死该程序将拥有多少个等级? 这与我们在面向对象语言中遵循的逻辑不同,当您定义数组时,您确切地知道大小。 他们在MPI中使用什么机制让系统决定排名和整个规模? 它灵活吗?通过机械功率决定?或者只是在通话时自动生成?

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;}

1 个答案:

答案 0 :(得分:4)

这是一个很好的参考:

这是一个教程:

这是一个相关的问题

回答你的问题:

  • 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返回通信器中进程的排名。每   在通信器内部的过程被分配增量等级   从零开始。这些流程的级别主要用于   发送和接收消息时的识别目的。

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