假设我在5个节点上运行MPI程序,它将运行50次模拟。但是,模拟可能需要大量不同的时间。如果我有一组初始条件,比如ic1,ic2,... ic50,当一个节点/进程完成一个模拟时,我希望它使用下一个(尚未使用的)初始条件集来运行新的模拟。我最初的想法是使用MPI_Bcast或MPI_Gather s.t.所有节点都有一个int,它持有下一个要运行的索引,并在开始新的模拟之前对其进行更新。这是一个合理的想法/是否有其他和/或更好的解决方案?在MPI中跟踪全局索引
0
A
回答
2
您需要共享工作队列。有很多方法可以做到这一点。最简单的方法是指定一个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共享文件指针例程很不满意,但在这种情况下,相对于CPU工作量,I/O很小(读取一个初始条件),那就没问题。
相关问题
- 1. libspotify API:跟踪索引
- 2. 如何跟踪UICollectionView索引
- 3. 全局变量的依赖性跟踪
- 4. 如何跟踪Array.sliding中的索引
- 5. Git跟踪,未跟踪,上演,索引的含义?
- 6. MPI全局执行时间
- 7. 全局变量和MPI
- 8. MPI及其全局变量
- 9. 如何在Javascript中跟踪/保留全局名称空间
- 10. 如何在Perl中跟踪全局变量?
- 11. Python跟踪,不显示索引
- 12. UIPageViewController无法跟踪页面索引
- 13. Laravel跟踪ElasticSearch,如何重置索引?
- 14. MPI处理器中MPI_Request是否全局?
- 15. 引发ArgumentError在ImagesController#索引,但appliaction跟踪是空的
- 16. 访问全局变量以跟踪多处理中的状态
- 17. 在python中跟踪索引的正确方法是什么?
- 18. Google安全跟踪Cookie
- 19. 跟踪全球化进程
- 20. 如何跟踪全球UITouches?
- 21. 在iOS和全栈跟踪上乱舞
- 22. 跟踪全局级别的依赖项属性值更改
- 23. Vue.js - 如何跟踪全局点击事件
- 24. XCode全局断点不显示堆栈跟踪
- 25. 对sql server全文索引的建议更改跟踪和人口的建议
- 26. 跟踪对象和引用
- 27. 如何在ajax调用期间跟踪数组索引
- 28. 在跟踪索引C时快速排序数据数组#
- 29. 在没有索引表的情况下跟踪开/关
- 30. SQL Server跟踪中创建索引事件ID /名称
从这个描述中不太清楚你的目标是什么。你能用一些简短的伪代码勾画出来吗? – 2014-10-08 04:19:58