并行IO可以使多个进程同时进行IO操作,在HPC应用中有大量的IO操作,并行IO能够提高程序运行速度。并行IO有三种模式:
一个进程(P0)将文件中的所有数据读入自己的缓冲区(buffer),然后用MPI发送接收函数将大部分数据传递给其他进程。计算结束后,其他进程将计算结果传给进程P0,P0负责将所有数据结果写到文件。这个模式下负责读写文件的进程是性能瓶颈,读写带宽受限于P0所在计算服务器的网络带宽、存储系统的单进程性能上限。
每个进程只操作自己的文件 ,彼此间不协调,相互独立。这种模式既能同时使用计算服务器的多个网络通道,又能发挥并行存储系统的多客户端接入能力。缺点是供读取的源数据文件可能没有进程数量多,造成负载不均,输出的文件数据太多,后续处理困难。
多个进程相互配合,避免无用操作。该模式下需要每个进程计算文件偏移指针,避免数据冲突。这种模式下并行IO性能可能达到最好。
并行IO有四种接口:POSIX I/O,MPI I/O,HDF5 I/O,NetCDF-4 I/O(parallel-netcdf),需要根据HPC应用支持的并行IO进行对应修改。这里以parallel-netcdf为例,parallel-netcdf是一个使用MPI-IO和一个定制版本的NETCDF API来实现高性能I/O的库,可以通过启用parallel-netcdf库来提升IO性能,常应用于气象、海洋、环境等领域。
修改步骤如下:
1 2 | export PATH=/path/to/PNETCDF/bin:$PATH export LD_LIBRARY_PATH=/path/to/PNETCDF/lib:$LD_LIBRARY_PATH |
1 2 3 | export PNETCDF=/path/to/PNETCDF export CPPFLAGS="-I$PNETCDF/include" export LDFLAGS="-L$PNETCDF/lib -lpnetcdf" |