OpenMPI
Linuxボックスに実行可能ファイルがあり、ライブラリまたはライブラリのいずれかでコンパイルされていることがわかっていMPICH
ます。
質問:どれを決定するのですか?
次の診断手順では、MPICH /MPICH2とOpenMPIが、リンクしている可能性のある唯一のMPI実装であると想定しています。他の(特に商用の)MPI実装は存在し、異なるライブラリ名やライブラリシンボルを持っている場合があります。
まず、動的にリンクしたかどうかを判断します。
% ldd my_executable
linux-vdso.so.1 => (0x00007ffff972c000)
libm.so.6 => /lib/libm.so.6 (0x00007f1f3c6cd000)
librt.so.1 => /lib/librt.so.1 (0x00007f1f3c4c5000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f1f3c2a7000)
libc.so.6 => /lib/libc.so.6 (0x00007f1f3bf21000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1f3c969000)
そのリストに表示libmpich.so
されている場合は、MPICH(またはMPICH2)に動的にリンクしています。表示されている場合はlibmpi.so
、OpenMPIにリンクしています。
どちらも存在しない場合は、おそらく静的にリンクしているだけです。その場合、区別する記号を探すためにバイナリを調べる必要があります。
% ( nm my_executable | grep MPIR_Free_contextid >/dev/null ) && echo "MPICH"
% ( nm my_executable | grep ompi_comm_set_name >/dev/null ) && echo "Open MPI"
Open MPIアプリケーションは、環境変数で渡すことができるMCAパラメーターに反応します。30に設定したようなシングルトンモード(つまりmpirun
/なし)で実行可能ファイルを実行するだけです。mpiexec
sysinfo_base_verbose
$ OMPI_MCA_sysinfo_base_verbose=30 ./program
次のような出力が得られた場合:
[hostname:pid] mca: base: components_open: Looking for sysinfo components
その場合、これは実行可能ファイルがOpenMPIを使用していることを示す強力な指標ではありません。