2011-06-09 66 views
1

当此调用过程中的进程数与计算开始时产生的进程数不同时,Bcast的语义是什么?MPI Bcast和进程数

我需要处理用户指定执行计算所需的过多进程的情况。例如,用户可能决定用mpirun产生16个进程,当我只需要12个进程在进程间分割问题时。我在处理这种情况时,通过将PID与12进行比较,并在PID过高时用MPI_Finalize结束进程。我认为这会导致我的应用程序出现死锁,因为Bcast想要发送到所有进程?

如何处理?我应该在所有进程中调用Bcast,但只是忽略某些输出?

回答

2

鉴于我们收到了什么可以考虑的来自用户的无效输入,我们是否真的应该在实现这个之后继续执行程序?向用户显示一条错误消息是不是更好,它说请求了一个无效数量的进程,并且还通知用户有关允许的时间间隔(例如,“请求了16个进程,但最大进程数是12 ,该程序现在将退出“)。否则,如果在您的情况下这不是一个可行的解决方案,则MPI 2.2 documentation中的第6章“组,上下文,通信器和缓存”和/或第10章“流程创建和管理”可能会有所帮助。在其他地方可能有其他更容易阅读的文档,但至少这是一个开始。

+0

这是一个家庭作业问题,关于这个特殊情况的规范不明确:) – jsmith 2011-06-10 11:21:54

+0

你是什么意思的“这个特殊情况”?你的意思是第一个问题:“当进程的数量是多少时,Bcast的语义是什么......”? – cic 2011-06-10 11:32:01

1

在程序启动时,每个进程都应该查看自己的排名(来自MPI_Comm_rank),进程总数(来自MPI_Comm_size(MPI_COMM_WORLD))以及计算实际需要的数量。在你需要的数量之下创建一个新的沟通者,你将实际用来做你的工作,并让所有剩下的职位只需拨打MPI_Finalize