MPI如何确定它的排名大小

3

我是一个MPI初学者,如果我在C++中编写以下代码,系统将如何决定程序将具有多少个rank?这与我们在面向对象语言中遵循的逻辑不同,当您定义数组时,您可以精确地知道大小。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;}

请查看此答案:https://stackoverflow.com/questions/43252285/mpi-rank-process - undefined
1个回答

5

这里是一个很好的参考:

这里是一个教程:

以下是相关问题:

回答你的问题:

  • Rank是(逻辑上的)进程编号(类似于线程id)

  • Size是进程的总数(分配的并行性)

当你使用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的“从”应用程序发送消息。或者您可以使用其他拓扑来划分工作负载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接