2012-05-05 19 views
2

當運行Valgrind的檢測MPI應用程序中的錯誤,我得到以下錯誤:爲MPICH配置的valgrind:錯誤libmpi * .so文件使用

libmpi.so.0: cannot open shared object file: No such file or directory 

我發現了以下工作: Valgrind documentation(第4.9節.1)指出:「MPI被包裝的函數被假定爲在與soname匹配的ELF共享對象libmpi.so *中,至少對Open MPI和Quadrics MPI來說這是正確的,並且可以很容易地被改變需要。」

因此,因爲我使用mpich2,它實際上應該使用libmpich.so.1.0。

這可以看出,在libmpiwrap.c:

#include "mpi.h" 

/* Where are API symbols? 
Open MPI  lib/libmpi.so, soname = libmpi.so.0 
Quadrics MPI lib/libmpi.so, soname = libmpi.so.0 
MPICH   libmpich.so.1.0, soname = libmpich.so.1.0 

A suitable soname to match with is therefore "libmpi*.so*". 

我的問題是:在哪裏以及如何配置呢?

+1

你是如何配置/安裝Valgrind的? MPICH2怎麼樣?IIRC它只是在你正確指定'--with-mpicc =/path/to/mpicc'到Valgrind的'configure'時起作用。還要確保您的MPICH2安裝配置了「--enable-shared」。 –

+0

根據valgrind文檔,會自動檢測mpi安裝。我在哪裏可以看到哪些mpi安裝valgrind使用?配置只是告訴我,mpicc已被發現。 – mort

+1

然後只要確保檢測到正確的MPI安裝。 '--with-mpicc ='選項只是幫助Valgrind找到正確的MPI安裝。 –

回答

1

我自己有這個問題。希望這可以指出你在正確的方向。不幸的是,MPI很難與valgrind和gdb一起工作。

選項1:找到合適的包裝。

在Fedora/RHEL /(基於rpm的)系統上,您可以在valgrind-openmpi包中找到OpenMPI共享庫。我找不到MPICH版本。我使用MVAPICH,所以這並沒有幫助我。如果您找到MPICH/MVAPICH版本,請發表評論,以便我可以在此處添加它。

PBone示出了內容爲具有共享對象中的libmpiwrapper。

選項2:從源代碼構建庫。 (我爲MVAPICH做了什麼)

我採取了從源代碼編譯valgrind,然後複製共享庫。我想保留valgrind的包管理器版本,所以我只匹配了源代碼的版本,並使用默認的GCC來保證安全。你可以使用最新,最好的,但我懷疑你得到了很多。

在構建Valgrind時,您需要確保它找到正確的MPI安裝。檢查輸出以驗證正確的共享庫和頭文件。我有一個在系統上安裝多個MPI的習慣,所以這是我學會了艱難的一步。花一些時間在autoconf/automake輸出上。幸運的是,Valgrind的維護人員在保持構建非常簡單方面做得很好,所以我沒有遇到任何編譯的主要問題。

源代碼 http://valgrind.org/downloads/

一旦你擁有了它,關鍵則因爲它們在文檔中提到建立ENV變量。

其他注意事項 - https://wiki.mpich.org/mpich/index.php/Support_for_Debugging_Memory_Allocation - https://fs.hlrs.de/projects/marmot/publications/paralleldebugging-ppt.pdf