2013-03-25 98 views

回答

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

开放MPI的应用程序反应MCA参数,即可以在环境变量进行传递。只是一些运行在单模式下的可执行文件(即没有0​​/mpiexec)像sysinfo_base_verbose设置为30:

$ OMPI_MCA_sysinfo_base_verbose=30 ./program 

如果你得到这样的输出:

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

,那么这是不是稳健的指示更该可执行文件使用Open MPI。