并行IO调优
原理
MPI程序读写文件有三种模式。
- 只用1个进程读写:一个进程(P0)将文件中的所有数据读入自己的缓冲区(buffer),然后用MPI发送接收函数将大部分数据传递给其他进程。计算结束后,其他进程将计算结果传给进程P0,P0负责将所有数据结果写到文件。这个模式下负责读写文件的进程是性能瓶颈,读写带宽受限于P0所在计算服务器的网络带宽、存储系统的单进程性能上限。
- 多个进程分别读写:每个进程只操作自己的文件 ,彼此间不协调,相互独立。这种模式既能同时使用计算服务器的多个网络通道,又能发挥并行存储系统的多客户端接入能力。缺点是供读取的源数据文件可能没有进程数量多,造成负载不均,输出的文件数据太多,后续处理困难。
- 多个进程读写同一个文件:多个进程相互配合,避免无用操作。这种模式下MPI并行IO性能有望达到最好。
Parallel-NetCDF是一个使用MPI-IO和一个定制版本的NETCDF API来实现高性能I/O的库。如果应用程序支持Parallel-netcdf库,那么可以通过启用Parallel-netcdf库来提升IO性能。气象、海洋、环境领域的应用有可能可以使用到,如流行的WRF气象模式应用。
同样HDF5库也可以在编译时启用并行模式,对于支持HDF5并行接口的应用也可以带来性能提升。
使用方法
- 执行以下命令安装PNETCDF。
tar -xvf parallel-netcdf-1.9.0.tar.bz2 cd parallel-netcdf-1.9.0 mkdir -p /path/to/PNETCDF ./configure --prefix=/path/to/PNETCDF --build=aarch64-unknown-linux-gnu CFLAGS="-fPIC -DPIC" CXXFLAGS="-fPIC -DPIC" FCFLAGS="-fPIC" FFLAGS="-fPIC" make -j 16 make install
- 执行以下命令设置PNETCDF环境变量。
export PATH=/path/to/PNETCDF/bin:$PATH export LD_LIBRARY_PATH=/path/to/PNETCDF/lib:$LD_LIBRARY_PATH
- 编译应用软件时通过设置CPPFLAGS和LDFLAGS将PNETCDF链接到应用软件。
export PNETCDF=/path/to/PNETCDF export CPPFLAGS="-I$PNETCDF/include" export LDFLAGS="-L$PNETCDF/lib -lpnetcdf"
父主题: 应用软件调优