MPI-IOは本当に便利なのか

ポエムです

MPI2.0以降の仕様として、MPI-IOがあります。今回は並列計算におけるMPI-IOの役割について考えてみようと思います。

 

役割

MPI-IOでは並列計算におけるファイルの読み書きを柔軟にする機能を提供しています。例えば100並列で計算を行い、何かしらの計算結果をファイル出力することを考えると、出力ファイルは各プロセスごとに生成されるため計算結果のファイルが100個生成されることになります(ある同一のパスへのファイルポインタを複数のプロセスが同時に持つことができないため)。しかし、MPI-IOを用いると複数のプロセスの間で1つのファイルを共有することができます。

メリット

  • 並列化したプロセスごとにファイルを分割出力をせずに済むので、モジュールとしての独立性があがる(何並列で計算しても出力されるファイルが一つにできるので、ほかのプログラムに並列数を教える必要がない)
  • MPI-IOを自前のコードに実装のためのコストが並列計算そのものを実装する場合に比べて低い

パフォーマンス

MPI-IOで気になるのはパフォーマンスが向上するのかしないのかというところだと思います。僕自身が試したわけではないのですが、僕の先輩がベンチマークを行っていたMPI-IOの結果を見るとおおむね計算時間は短縮傾向にあったと思います。これは計算時間の中でもそこそこコストの高いディスクへのIOがMPI-IOにより効率が上がったためだと思われます(恐らくですが、複数のプロセスの計算結果をバッファにためておき、ある程度まとまった段階で出力することでディスクへのアクセス回数が減りパフォーマンスの向上につながったものだと考えられます)。

しかしながら、MPI-IOそのものは計算の効率を向上させるものというよりは、時間がかかりやすいディスクへのIOまわりにおいて”IOが足を引っ張らないようにするための機能”と表現する方が近いのかな?と思います。

MPIはまだまだ分からないことが多いので、MPI-IOに詳しい人がいれば教えてください。

それでは

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top