我是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;}
答案 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”应用程序。或者您可以使用其他拓扑来划分工作负载。