---
title: 并行IO调优
description: "MPI程序读写文件有三种模式。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/tngg/kunpenghpcsolution_05_0029.html
sourcePath: /source/zh/kunpenghpcs/hpcindapp/tngg/kunpenghpcsolution_05_0029.html
indexId: c52e9feed50a91c538b8935e4d4493f504aef0cc07d270f253a81985be170be669
---
# 并行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并行接口的应用也可以带来性能提升。


#### 使用方法

1. 执行以下命令安装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
```


2. 执行以下命令设置PNETCDF环境变量。

```
export PATH=
/path/to/PNETCDF
/bin:$PATH
export LD_LIBRARY_PATH=
/path/to/PNETCDF
/lib:$LD_LIBRARY_PATH
```


3. 编译应用软件时通过设置CPPFLAGS和LDFLAGS将PNETCDF链接到应用软件。

```
export PNETCDF=
/path/to/PNETCDF
export CPPFLAGS="-I$PNETCDF/include"
export LDFLAGS="-L$PNETCDF/lib -lpnetcdf"
```
