yhn*_*yhn 3 c++ computer-science mpi 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;}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的参考:
这是一个教程:
这是一个相关的问题
回答你的问题:
Rank 是(逻辑)进程号(如线程 ID)
Size 是进程总数(已分配、并行度)
当您使用 MPI_Init 时,请参见:https: //www.sharcnet.ca/help/index.php/Getting_Started_with_MPI观察如何设置进程数。
mpirun -n 4 ./parhello
Run Code Online (Sandbox Code Playgroud)
您可以使用“-n N”构造 argv[] 数组,并为 MPI_init 调用指定世界大小。
您还可以使用环境变量设置世界大小,
借用另一个问题/答案:
MPI_Comm_size 返回通信器的大小。在我们的示例中,MPI_COMM_WORLD(由 MPI 为我们构建)包含作业中的所有进程,因此此调用应返回作业请求的进程数量。
MPI_Comm_rank 返回通信器中进程的等级。通信器内的每个进程都被分配一个从零开始的递增等级。进程的等级主要用于发送和接收消息时的识别目的。
等级用于区分进程。您可能有一个“主”进程(等级 = 0),它向等级 1-15 上的“从属”应用程序发送消息。或者您可以使用其他拓扑来划分工作负载。