首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪MPI中的全局索引

跟踪MPI中的全局索引
EN

Stack Overflow用户
提问于 2014-10-07 20:53:26
回答 1查看 87关注 0票数 0

假设我在5个节点上运行一个MPI程序,它将运行50次模拟。然而,模拟可能需要明显不同的时间。如果我有一组初始条件,比如ic1、ic2、...ic50,当一个节点/进程完成一个模拟时,我希望它使用下一个(尚未使用)初始条件集来运行一个新的模拟。我最初的想法是使用MPI_Bcast或MPI_Gather s.t。所有节点都有一个int来保存要运行的下一个索引,并在开始新的模拟之前更新它。这是否是一个合理的想法/是否有其他和/或更好的解决办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 12:02:38

您需要一个共享的工作队列。有很多方法可以做到这一点。最简单的方法是指定一个mpi等级为“主人”,另一个为“工人”。工人们向主人要一个工作单位(你的初始条件之一),去工作,当工作完成后,向主人要一个新的。这里还有一些额外的细节(上面写着OpenMPI,但没有什么是OpenMPI特有的):Non-blocking data sharing through OpenMPI

有一个名为ADLB (http://www.mcs.anl.gov/project/adlb-asynchronous-dynamic-load-balancer)的项目,它是一个类固醇上的工作队列。对于一个5节点作业,可能(肯定)过高,但对于5,000个节点作业可能是有意义的。

您可以使用RMA共享内存,并使用它来跟踪索引。如果拥有RMA窗口的进程本身忙于工作单元上的计算,那么响应请求可能会有点慢,但是您不需要将一个MPI进程作为主进程来燃烧。

您可以使用MPI共享文件指针例程将工作队列保持在磁盘上。我通常比较不喜欢MPI共享文件指针例程,但在这种情况下,I/O相对于CPU工作量很小(读取初始条件),就可以了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26245097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档