Parallel I / O in Practic:Parallel File System(73-97)


My Reserches

INDEX

MPI-IO Interface

概要

  • データモデル
    • バイトストリーム
    • 移植可能なデータフォーマット
  • Feature
    • Collective I/O
    • Noncontiguous I/O
    • Nonblocking I/O
    • Fortran bindings

Independent and Collective I/O

  • MPI IO はCollective I/Oを採用
    mpi1.jpg

Independent I/O

  • 一人ひとりが独立にI/Oを行う
  • 他のプロセスと相談しない

Collective I/O

  • プロセスグループによってストレージへのアクセスを管理
  • I/Oレイヤはアクセス情報を把握しているので、下位レイヤによる最適化の余地がある。

Contiguous and Noncontiguous I/O

  • Noncontiguous I/Oを採用
    mpi2.jpg

Contiguous I/O

図参照

Noncontiguous I/O

  • 単一の命令でNoncontiguousアクセスを記述するためにいは、I/Oシステムへより多くの情報を流す必要がある

Nonblocking and Asyncronous I/O

  • MPI I/OではNonblocking I/Oを採用

Blocing, Synchronous I/O

  • Blocking, or Synchronous, I/O operations return when buffer may be reused
    • Data in system buffers or on disk
    • 計算とI/Oをオーバーラップさせることもある

Nonblocking, Asyncronous I/O

  • Nonblocing interface allows for submitting I/O operations and testing for completion later
  • Asynchronous I/O
    • 実装にもよるが、バックグランドで処理を実行することができる

Example

Exanple:Simple MPI-IO Examples

実際にサンプルコードを動かしてみた。Simpleだった。

  1. writing [#f31766e7]
    1. MPI_File fh;
    2. MPI_Status status;
    3. MPI_Init(&argc, &argv);
    4. MPI_File_open(MPI_COMM_WORLD, "myfile", MPI_MODE_WRONLY | MPI_MODE_CREATE, MPI_INFO_NULL, &fh);
    5. MPI_File_write(fh, buf, 13, MPI_CHAR, &status);
    6. MPI_File_close(&fh);
    7. MPI_Finalize();
  2. reading [#y842707c]
    1. MPI_File fh;
    2. MPI_Status status;
    3. MPI_Init(&argc, &argv);
    4. MPI_File_open(MPI_COMM_WORLD, "myfile", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
    5. MPI_File_read_all(fh, buf, 13, MPI_CHAR, &status);
    6. MPI_Get_count(&status, MPI_CHAR, &count);
    7. MPI_File_close(&fh);
    8. MPI_Finalize();

Exanple: Visualization Staging

mpi3.jpg
mpi4.jpg
  • MPI_File_set_view関数によってcontiguousでないファイルの断片を読み込むことができる
  • たとえば、RGBのバイナリファイルのTile4部分だけ読むこともできる....らしい?

Under the Covers of MPI-IO

  • MPI-IOはとりあえず、すごい。
  • Noncontiguousなデータアクセスや集団通信において最適化の余地がある

Noncontiguous I/O: Data Sieving

mpi5_.jpg
mpi6.jpg

Read & Write

  • リモートファイルアクセスは高いレイテンシーがつきもの
  • 小さなアクセスが多発した場合、それをまとめて大きなファイルを読み込めば最適ができるのではないか?という話。

Collective I/O and the Two_Phase I/O optimization

mpi7.jpg

↑こんな感じ(Two Phase I/O)に、みんなが独立にData Sieving I/Oをするのではなく、みんなで協力すればData Sievingにおける余分なreadを減らせるのではないか?と言う話。

  • p0:赤がほしい
  • p1:オレンジがほしい
  • p2:黄色がほしい

Performance

mpi8.jpg
mpi9.jpg
mpi10.jpg

(# of Distinct contiguous Regionsにもよるが)どのファイルシステムにおいても、Collective I/Oにおける最適化(Two_Phase I/O)が生かされている。


MPI-IO Implementations

3つのMPI-IO Implementationが存在

ROMIO from Argonne National Laboratory

mpi11.jpg
  • 階層構造をとる

MPI-IO/GPFS from IBM(for AIX only)

さまざまな最適化

  • Data shipping
    • 単一のファイルアクセスに対するロックの衝突の軽減
  • Controlled prefetching
    • MPI file viewやaccess patternを用いて、アクセス領域の予測

MPI from NEC

  • listless I/O最適化
    • MPIレイヤでNoncontiguous I/Oアクセスを速く処理する。

まとめ

  • MPI-IOは有用なインタフェース
    • Noncontiguousアクセス
    • Collective I/O
  • これによりさまざまなI/O手段やそれによる最適化の実現
  • high-level I/Oライブラリへのインタフェース

Higher Level I/O Interfaces

  • ファイルの構造を提供
  • 科学計算に対してより有用なAPIを提供
  • レイヤ的にMPI-IOの上位に位置する