我正在使用 MPI 库为大规模 CFD 代码设置 IO,并且随着问题规模的扩大,文件 IO 开始占用计算时间。
据我所知,现代背景下的“完成”的事情是大量利用集体 IO 操作,(ARCHER 上的并行 IO 性能- 2015 年白皮书)。
我的问题是,似乎有三种调用集体写入的方法:
MPI_File_write_all
,阻塞MPI_File_iwrite_all
,非阻塞
并且有些推测:
MPI_File_iwrite
然后调用MPI_File_sync
,先非阻塞然后阻塞?我之所以说是推测,是因为前一个调用显然是非集体的,而后者(据我所知,后者实际上是将数据推送到存储)是集体的。
我的问题是,多个MPI_File_iwrite
s 后跟 a是否MPI_File_sync
等同于一个MPI_File_write_all
,因为文件同步使得非集体写入有效地变成了集体写入?编辑 - 为了清楚起见,我知道 sync 是一个集体例程,我问的是调用 sync 时发生的 IO 是否类似于 write_all 的集体 IO。
后续问题:MPI_File_iwrite_all
调用是否需要MPI_File_sync
调用,如果确实需要,那么集体非阻塞写入的目的是什么,如果它只是变成了阻塞?
我在这里非常关注阻塞与非阻塞,因为我试图从我的代码中完全删除所有同步以提高 CPU 利用率(即,只有当进程缺少来自邻居的所需信息时才会等待,而不是等待所有进程同步)但显然这在输出时会出现一些问题。