トレーニングの目的で、Ubuntu 18.04.4 TLSを実行しているのと同じシステムにさまざまなバックエンドコンパイラ(gcc、clang、icc)を使用してOpenMPI、MPICH、Intel MPIなどの複数のMPIライブラリを設定したいと思います。特定のコードが1つのMPIライブラリ/コンパイラまたは別のMPIライブラリ/コンパイラでどのように機能するかを確認する必要がある場合、それらを簡単に切り替えるための最良の方法は何ですか?
これまでは、mpiccの-cc
コマンドライン引数(MPICH)または環境変数(OpenMPI)を介してのみOMPI_CC
コンパイラを選択できました。ただし、たとえばMPICHの後にOpenMPIをインストールすると、MPICHのmpiccがOpenMPIのmpiccに置き換えられているように見え、デフォルトでMPICHへのアクセス権が失われます。
$ sudo apt install mpich
$ mpicc -show
gcc -Wl,-Bsymbolic-functions -Wl,-z,relro -I/usr/include/mpich -L/usr/lib/x86_64-linux-gnu -lmpich
$ sudo apt install libopenmpi-dev
$ mpicc -show
gcc -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/opal/mca/event/libevent2022/libevent -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/opal/mca/event/libevent2022/libevent/include -I/usr/lib/x86_64-linux-gnu/openmpi/include -pthread -L/usr//lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi
どちらも持っていて、現在使用したいものを選択できますか?
答え1
そのためにドッカーコンテナを使用します。これは以下を提供します:
- 各コンテナに1つのコンパイラと1つのライブラリのみが存在することを保証しながら、すべての種類のコンパイラとライブラリの組み合わせを含む複数のコンテナです。
- 真の「クリーン」コーディング環境(学習または教えている場合は、余分な「ジャンク」が多すぎるシステムを使用したくありません。状況をより複雑にするだけです)
- 環境は、あらゆるタイプのコンピュータでほぼ同じように見えます。 (教えている場合は、すべての学生が同じことを見ることを望みます。)
などの基本イメージとbuildargsをDockerfile
使用して作成します。これにより、コンパイラとmpiライブラリのさまざまな組み合わせを使用して複数のコンテナをすばやく作成できます。ubuntu:18.04
COMPILER
MPILIB