MPI_Finalize() 仅某些处理器

计算科学 C++ mpi
2021-12-28 21:37:23

我想开发一种具有负载平衡能力的 MPI 分布式算法。但是有一种情况我不是很清楚,就是当任务数小于可用处理器数时,我需要检测并终止那些rank(实际上是rank + 1)更大的处理器超过任务总数。在我的实现中,我只是添加一个条件来确定,如果条件为真,则执行某些操作,否则,调用 MPI_Finalize() 来关闭这些处理器。供您参考,这是伪代码:

MPI_Init();
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank);
if (proc_rank + 1 < task_counts):
    do something (including some collective communications);
MPI_Finalize();
return 0;

这个算法似乎比较明显。但是,它不起作用。我在 MPI_Finalize() 之后添加了一些 fprintf 代码,但是对于那些等级超出范围的处理器,此代码从未到达那里。

那么这里有什么问题呢?

0个回答
没有发现任何回复~