关于 MPI 的问题 IOs

Questions About the MPI IOs

关于mpi编程,什么时候使用io的集体操作?我什么时候应该使用共享文件指针 IO 操作而不是单个文件指针 IO 操作?

集体 MPI I/O 通常更优化,当您的代码中有常规 I/O 点时,您可能更喜欢它,所有进程同时到达。它可以使用更少的进程来进行实际写入(例如每个节点一个)来写入更少但更大的数据块,以最大限度地减少开销。它也可能在实际写入之前开始收集数据。

对于示例,如果您的问题有一个很好的分解域,并且您想在每个时间步的末尾写入更新的值,这是一个不错的选择。

集体操作由名称的 _all 部分注明,其中 "opposite" 是独立于进程的单任务操作(没有 _all) (例如,您可能有一些进程写入与其他进程不同的数据)。它们都有阻塞和非阻塞版本。请记住 "collective" 并不意味着 "blocking".

正如您已经发现的,单任务和集体操作都存在于 "individual file pointer" 版本(最简单)、"explicit offset" 版本(_at)和 "shared file pointer"(_shared(单个任务)或_ordered(集体))。

当您想在每个进程中写入不同的文件时,您可以使用单独的文件指针。当每个进程要写入大量数据以及许多节点并且最好以本地方式写入它们以减少带宽时,这可能会更好。我不知道这在哪些场景和文件系统中可能有用,但请记住,在 "normal" 问题中,通常最好使用少量大数据流而不是许多小数据流,以减少开销。您可能还有一些 post 处理原因,或者您的所有进程都没有写入相同类型的数据。

谈论同一个文件时:

您可以使用 显式偏移量 将每个进程指向文件中的不同点。

您可能主要在处理进程组时使用共享指针 版本。因此,每个进程都可以从共享指针作为参考开始,并在它之后的适当位置写入。

请记住,指针还与 文件视图 相关联。不过这又是一个大话题了。