2013-03-25 43 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。

相關問題