假设我在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. 在LLVM中跟踪全局定义
- 2. libspotify API:跟踪索引
- 3. 如何跟踪UICollectionView索引
- 4. 全局变量的依赖性跟踪
- 5. Python,如何跟踪全局变量
- 6. 如何跟踪Array.sliding中的索引
- 7. Git跟踪,未跟踪,上演,索引的含义?
- 8. 检索异常全堆栈跟踪
- 9. 如何在Javascript中跟踪/保留全局名称空间
- 10. 如何在Perl中跟踪全局变量?
- 11. MPI和全局变量
- 12. MPI全局执行时间
- 13. 全局变量和MPI
- 14. MPI及其全局变量
- 15. Python跟踪,不显示索引
- 16. 如何跟踪辅助索引编号
- 17. 分类时跟踪向量对索引
- 18. 搜索引擎跟踪斜线问题
- 19. Laravel跟踪ElasticSearch,如何重置索引?
- 20. UIPageViewController无法跟踪页面索引
- 21. Gtags索引全局变量
- 22. MPI处理器中MPI_Request是否全局?
- 23. 引发ArgumentError在ImagesController#索引,但appliaction跟踪是空的
- 24. 访问全局变量以跟踪多处理中的状态
- 25. 如何跟踪python中的全局变量
- 26. 在python中跟踪索引的正确方法是什么?
- 27. 在Haskell中使用匿名函数跟踪列表索引
- 28. 在javascript中使用shuffle算法跟踪索引
- 29. 在apache中禁用跟踪和跟踪
- 30. 在ng-repeat中跟踪未跟踪
从这个描述中不太清楚你的目标是什么。你能用一些简短的伪代码勾画出来吗? – 2014-10-08 04:19:58