我用OpenMPI或MPICH编译了吗?

时间:2013-03-25 15:54:54

标签: openmpi mpich

我的Linux机器上有一个可执行文件,我知道它已经用OpenMPIMPICH库编译。

问题:如何确定哪一个?

2 个答案:

答案 0 :(得分:5)

以下诊断程序假定MPICH / MPICH2和Open MPI是 您可能已经链接的唯一可能的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,那么您已与Open MPI相关联。

如果两者都不存在,那么您可能只是静态链接。在这种情况下 我们需要检查二进制文件以寻找区别符号:

% ( nm my_executable | grep MPIR_Free_contextid >/dev/null ) && echo "MPICH"
% ( nm my_executable | grep ompi_comm_set_name >/dev/null ) && echo "Open MPI"

答案 1 :(得分:1)

Open MPI应用程序对MCA参数做出反应,可以在环境变量中传递。只需以单身模式运行可执行文件(即没有mpirun / mpiexec),sysinfo_base_verbose设置为30:

$ OMPI_MCA_sysinfo_base_verbose=30 ./program

如果您得到如下输出:

[hostname:pid] mca: base: components_open: Looking for sysinfo components

然后,这不仅是可执行文件使用Open MPI的强大指示。