本項ではOpenMPIの依存関係を含めて自前でのビルドを行います。
Versions
https://github.com/open-mpi/ompi
library | version |
---|---|
ompi | v5.0.3 |
hwloc | v2.7.1 |
libevent | v.2.1.12 |
openpmix | v5.0.2 |
prrte | v3.0.5 |
ucx | v1.16.0 |
ucc | v1.3.0 |
OpenMPI v.5.0.3 におけるフォルダ構成
. ├── 3rd-party │ ├── hwloc-2.7.1 │ ├── libevent-2.1.12-stable │ ├── openpmix │ ├── prrte │ ├── romio341 │ └── treematch ├── autom4te.cache ├── build ├── config ├── contrib ├── docs ├── examples ├── ompi ├── opal ├── oshmem └── test
OpenMPIの依存関係のグラフ
図は 4.8. Required support libraries — Open MPI main documentation から引用。下の方、つまり依存関係が少ないライブラリからビルドする。
事前設定
export OMPI_PATH=/XXX/ompi # cloneしたompiディレクトリのパス export PREFIX=/YYY # どこか
依存関係のビルド
libevent
高性能な非同期イベント駆動型プログラムを構築するためのCライブラリ。主にネットワークプログラミングや非同期I/Oに関連するタスクで使用される。
cd $OMPI_PATH/3rd-party/libevent-2.1.12-stable ./configure --prefix=$PREFIX && make -j && make install
hwloc
hwloc(Hardware Locality)は、システムのハードウェアトポロジーを管理および可視化するためのライブラリ
cd $OMPI_PATH/3rd-party/hwloc-2.7.1 ./configure --prefix=$PREFIX && make -j && make install
OpenPMIX
並列計算(特に高性能コンピューティング:HPC)環境におけるプロセス管理と情報共有のためのフレームワーク
- プロセス管理の標準化: 並列アプリケーションのプロセス起動、終了、同期などを効率的に管理
- ランタイム環境間の相互運用性: OpenMPI、SLURM、PBSなど異なるHPCランタイム環境の連携を実現
- プロセス間情報共有: プロセスやリソースの状態、メタデータを効率的に交換
- リソース管理との統合: リソースマネージャと連携し、ジョブのスケジューリングやリソース割り当てを管理
- 非同期通信のサポート: 動的なプロセス間通信やデータ共有を効率化
- ジョブレジリエンスの提供: 障害発生時のジョブ維持や動的再構成をサポート
- データの公開と検索: プロセス間でデータを公開・取得できる機能を提供
- ジョブの同期とバリア操作: 並列プロセス間の同期を簡潔に実現
cd $OMPI_PATH/3rd-party/openpmix/ ./autogen.pl ./configure \ --prefix=$PREFIX \ --with-libevent=$PREFIX \ --with-hwloc=$PREFIX make -j && make install
PRRTE
Open MPIの実行時環境を管理するためのソフトウェア。
PRRTEは以下の機能を提供
- プロセスの起動と管理:リモートプロセスの起動、監視、終了、および収集を担当
- リソースの発見と割り当て:利用可能な計算リソースを検出し、適切に割り当てる
- 入出力のリダイレクト:リモートプロセスの標準出力やエラー出力を適切に処理
PRRTEは、その名の通りPMIxのリファレンス実装として開発。PMIxは、さまざまな実行時環境との通信を統一的なAPIで提供し、Open MPIが特定の実行時環境の詳細を意識せずに動作できるようにする。PRRTEは、特にスケジューラが存在しない環境や、リモートプロセスの管理機能が不足している環境で、これらの機能を補完。 
Open MPIのバージョン5.0.x以降では、PRRTEがデフォルトの実行時環境管理システムとして採用。これは、以前のORTEからの進化であり、PRRTEは独立したプロジェクトとして、ネイティブな実行時環境(例えばSlurm, PBS/Torque, LSF)を持たない環境に対して、実行時環境のインフラストラクチャを提供。 
MPI (Message Passing Interface) PRRTE(PMIx Reference RunTime Environment) PMIx(Process Management Interface for Exascale) ORTE(Open Run-Time Environment)
cd $OMPI_PATH/3rd-party/prrte/ ./autogen.pl ./configure \ --prefix=$PREFIX \ --with-libevent=$PREFIX \ --with-hwloc=$PREFIX \ --with-pmix=$PREFIX make -j && make install
OpenMPI のビルド
cd $OMPI_PATH ./autogen.pl ./configure \ --prefix=$PREFIX \ --with-ucx=$PREFIX \ --with-ucc=$PREFIX \ --with-libevent=$PREFIX \ --with-hwloc=$PREFIX \ --with-pmix=$PREFIX \ --with-prrte=$PREFIX
事後処理
最後にLD_LIBRARY_PATHとPATHを更新すればok
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH export PATH=$PREFIX/bin:$PATH