目录
MPI-2与MPI-1另一个重要的区别是MPI-2支持并行I/O,因为许多应用中I/O是不可缺少的部分,所以MPI-2在大量实践基础上,提出一套并行I/O的标准接口。接下来我们将通过几节内容对MPI中并行I/O进行介绍,以实现对文件的各种并行操作和管理。
一、概述
1、按照读写定位分类
MPI-2提供了丰富的并行文件I/O调用,根据读写定位方法的不同,可以分为三种:
①指定显式的偏移。这种调用没有文件指针的概念,每次读写操作都必须明确指定读写文件的位置;
②独立的文件指针。这种方式的文件操作不需要指定读写的位置,每一个进程都有一个相互独立的文件指针,读写的起始位置就是当前指针的位置,读写完成后文件指针自动移到下一个有效数据的位置。这种方式的文件操作,需要每一个进程都定义各自在文件中的“视口”,视口数据是文件连续或不连续的一部分,各个进程对视口的操作,就如同是对一个打开的独立的连续文件的操作一样;
③共享文件指针。这种情况下,每一个进程对文件的操作,都是从当前共享文件指针的位置开始,操作结束后共享文件指针自动转移到下一位置,共享指针位置的变化对所有进程都是可见的,各进程使用的是同一个文件指针,任何一个进程对文件的读写操作都会引起其它所有进程文件指针的改变。
2、按照同步机制分类
根据同步机制的不同,对文件的操作又可以分为阻塞和非阻塞两大类。
①阻塞调用。对文件的读写调用返回后,可以使用读入数据缓冲区中的数据或者文件已经被更新,但是对于非阻塞文件读写,如果非阻塞通信类似,读写调用的返回并不意味着读写调用的完成,需要调用相应的完成语句来保证读写操作的完成;
②非阻塞调用。进一步细分为单步法和两步法,单步法的含义是指MPI只提供非阻塞文件读写的开始操作,不提供完成操作。对于两步法,MPI明确提供非阻塞文件读写的开始和完成语句,将对文件读写操作的调用分为明显的两步。对于单步法,其实也需要完成调用,只不过它使用的是和非阻塞通信一样的MPI_WAIT之类的完成方式,而不是特别的对文件操作的完成方式。只有对组读写,才可以使用两步法。
3、按照参加读写操作的进程的限制分类
根据对参加读写操作的进程的限制,可以分为独立读写和组读写。所谓独立读写,就是单个进程可以实现的读写操作,不需要其它进程的参与;对于组读写,则要求所有的进程都必须执行相同的读写调用,但是提供给该调用的读写参数可以不同。
以上任意一种读写定位方式,任意一种同步机制,都有独立读写和组读写的调用。但是,在MPI-2中,对于非阻塞的组读写,只有两步法,不存在单步法调用。这是因为对于非阻塞的组调用,使用MPI提供的将读写明显分开的两步法,可以提供给MPI更多的优化机会,有利于对非阻塞组读写的高效实现。
注意:在文件的各种组调用中,并没有给出进程组或通信域,该调用所适用的进程组是由调用使用的文件句柄决定的。因为文件打开时,需要给出通信域参数&#