至于mpi编程,我应该何时使用io的集合操作?我什么时候应该使用共享文件指针IO操作而不是单个文件指针IO?
答案 0 :(得分:1)
集体MPI I / O 通常会更加优化,当您的代码中有常规I / O点时,您可能更喜欢它,所有进程都会同时到达。它可以使用更少的进程来进行实际写入(例如,每个节点一个)以写入更少但更大的数据块,以最小化开销。它也可能在实际写入之前开始收集数据。
对于示例,如果您的问题有一个很好的分解域,并且您希望在每个时间步结束时编写更新的值,那么这是一个不错的选择。
集体操作由_all
部分注明名称和"对面"其中的单个任务操作(没有_all
)与进程无关(例如,您可能有一些进程编写的数据不同于其他进程)。它们都具有阻塞和非阻塞版本。请记住"集体"并不暗示"阻止"。
正如您已经发现的那样,单个任务和集体操作都存在于"单个文件指针"版本(最简单),"显式偏移"版本(_at
)和"共享文件指针" (_shared
(单个任务)或_ordered
(集体))。
如果要在每个进程中编写不同的文件,可以使用单个文件指针。当每个进程要写入大量数据以及许多节点时,这可能会更好,并且最好以本地方式编写它们以减少带宽。我不知道在哪些场景和文件系统中这可能是有用的,但请记住,在" normal"问题通常更好的是拥有少量的大数据流而不是很多小数据流来减少开销。您可能还有一些后处理原因,或者根本不是所有进程都在写相同类型的数据。
在谈论同一个文件时:
您可以使用显式偏移将每个进程指向文件中的其他位置。
您主要在处理进程组时使用共享指针版本。因此,每个进程都可以从共享指针作为引用开始,并在其后的适当位置写入。
请记住,指针也与文件视图连接。但这是另一个重要话题。