核心概念
C++とMPIは高性能コンピューティングの基盤を成すが、MPIはC言語とFortranのバインディングしか提供していない。本研究では、C++の言語機能を活かした新しいMPIバインディングを提案し、低レベルのMPI呼び出しから便利なSTLスタイルのバインディングまでをカバーする。ほとんどのパラメータを小さな部分集合から推論することで、高速なプロトタイピングと実行時動作の微調整を可能にする。柔軟な型システムと追加の安全性保証により、プログラミングエラーを防ぐ。C++のテンプレートメタプログラミング機能を活用することで、必要なコードパスのみがコンパイル時に生成されるため、(ほぼ)ゼロオーバーヘッドを実現する。
摘要
本論文では、MPI (C++)言語バインディングの設計に関する新しいアプローチを提案している。
主な特徴は以下の通り:
- パラメータ処理:
- 必要最小限のパラメータを指定するだけで、デフォルトパラメータを柔軟に計算できる
- メモリ管理を細かく制御できる
- 型システム:
- 静的型と動的型の両方をサポート
- 型定義の自動生成と、シリアライゼーションの透過的サポート
- 非ブロッキング通信の安全性:
- メモリアクセスの不正を防ぐ所有権モデルを導入
- 完了待機の簡易化
- 拡張性:
- コアライブラリを小さく保ち、プラグインによる機能拡張を容易にする
これらの機能により、MPI C++アプリケーションの開発を大幅に簡素化し、かつ高性能を維持できる。
様々なベンチマークアプリケーションを用いて、提案手法の有効性を実証している。
統計資料
MPI呼び出しは1秒間に約700回発生する
KaMPIngを使うことで、RAxML-NGのバイナリサイズが2.5%増加するのみ
KaMPIngを使うことで、RAxML-NGのコンパイル時間が1:15分から1:30分に増加する