Concurrency MPI Bcast和进程数

Concurrency MPI Bcast和进程数,concurrency,parallel-processing,mpi,Concurrency,Parallel Processing,Mpi,当此调用期间的进程数与计算开始时生成的进程数不同时,Bcast的语义是什么 我需要处理这样一种情况:用户指定了执行计算所需的太多进程。例如,用户可能决定使用mpirun生成16个进程,而我只需要12个进程就可以在进程之间分割问题。我通过比较PID和12来处理这种情况,当PID太高时,用MPI_Finalize结束一个进程。我认为这会在我的应用程序中造成死锁,因为Bcast希望发送到所有进程 怎么处理?我应该在所有进程中调用Bcast,但在某些进程中忽略输出吗?鉴于我们从用户那里收到了无效的输入,

当此调用期间的进程数与计算开始时生成的进程数不同时,Bcast的语义是什么

我需要处理这样一种情况:用户指定了执行计算所需的太多进程。例如,用户可能决定使用
mpirun
生成16个进程,而我只需要12个进程就可以在进程之间分割问题。我通过比较PID和12来处理这种情况,当PID太高时,用MPI_Finalize结束一个进程。我认为这会在我的应用程序中造成死锁,因为Bcast希望发送到所有进程


怎么处理?我应该在所有进程中调用Bcast,但在某些进程中忽略输出吗?

鉴于我们从用户那里收到了无效的输入,我们真的必须在意识到这一点后继续执行程序吗?最好向用户显示一条错误消息,说明请求的进程数无效,并告知用户允许的时间间隔(例如,“请求了16个进程,但最大进程数为12个,因此程序现在将退出”)


否则,如果在您的情况下这不是一个可行的解决方案,那么第6章“组、上下文、通讯器和缓存”和/或第10章“流程创建和管理”可能会有所帮助。其他地方可能还有其他更容易阅读的文档,但至少这是一个开始。

在程序启动时,每个进程都应该查看自己的级别(从
MPI\u Comm\u rank
),进程总数(从
MPI\u Comm\u size(MPI\u Comm\u WORLD)
),以及计算实际需要的数量。让排名低于您需要的数字创建一个新的通讯器,您将实际使用它来完成您的工作,并让所有剩余的排名只调用
MPI_Finalize

这是一个家庭作业问题,规范不清楚此特定情况:)您所说的“此特定情况”是什么意思?你的意思是第一个问题“当进程数增加时,Bcast的语义是什么?”?