c++ - 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;}
解决方案
这是一个很好的参考:
- http://mpitutorial.com/tutorials/mpi-hello-world/
- http://mpitutorial.com/tutorials/introduction-to-groups-and-communicators/
这是一个教程:
这是一个相关的问题
要回答您的问题:
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 的“从”应用程序。或者您可以使用其他拓扑来划分工作负载。
推荐阅读
- scala - circe 自动推导 - 与进口作斗争
- javascript - 在 url (Javascript) 上添加部分时无法识别 Cookie
- mysql - 是否可以从 MYSQL 中的存储过程中返回多个表
- c# - 等效于 php 中的 C# Encoding.UTF8.GetBytes
- javafx - 重置无限 JavaFX RotateTransition
- ruby-on-rails - Ruby on Rails 控制器实例变量未共享
- functional-programming - 如何使用 [@ocaml.warning "-30"] 隐藏警告 30
- docker - Spark with docker swarm:主机名中的非法字符
- java - 如何在 ZAP 中配置主动扫描输入向量?
- angular - Angular 6 动态组件