2013-02-12 101 views

回答

1

你說你打算安裝帶MPI支持的valgrind。這意味着你可以使用mpicc或其他mpi編譯器。 Valgrind所要求的是,用相同的編譯器來構建。如果您打算使用valgrind本身調試任何這些mpi編譯器,則需要遵循Valgrind Integration部分下的說明。

沒有關於您使用哪種分配的信息。在Debian系統上,valgrind-mpi可能是您正在尋找的軟件包。

+0

對不起,如果我原來的帖子不夠清楚。我打算用Valgrind調試我自己的MPI應用程序,而不是實際的MPI編譯器。 Valgrind文檔說用--with-mpicc =/path/to/mpicc進行配置,所以這裏假定你有一個安裝了MPI發行版的版本。但是,例如,在OpenMPI文檔中,它說使用--enable-debug --enable-memchecker --with-valgrind =/path/to/valgrind進行配置 - 在安裝Valgrind之前,我無法做到這一點。 – user787267 2013-02-12 02:31:38

+0

我原來的理解看起來沒問題。你應該沒問題,如果你安裝mpi編譯器,然後用'--with-mpicc =/path/to/mpicc'構建valgrind。這樣很難繼續下去。如果你有任何問題或錯誤的形式,這將是非常有益的。 – vpit3833 2013-02-12 03:31:59

2

這裏沒有循環依賴。相反,您正面臨將Valgrind客戶端請求置於不同位置的兩種不同方法。

開放式MPI可以使用OMPI特有的Valgrind支持來構建。這與構建支持MPI支持的Memchecker不同,它還允許檢查OMPI內部(這也是爲什麼它還要求您在OMPI中啓用調試)。 Memchecker客戶端請求以OMPI特定的方式成爲庫代碼的一部分。這不需要修改Valgrind代碼,也就是說它應該可以與任何Valgrind安裝一起工作(假定滿足最低版本要求)

另一方面,Open MPI以及任何其他MPI實現提供了PMPI分析界面。這可以被Memchecker用來提供通用MPI支持。如文檔中所述,Memchecker構建了一個函數庫,用於替換(幷包裝)原始MPI調用(這是PMPI機制的工作方式 - 所有MPI_*調用都是弱符號,並且可以被其他具有相同名稱的符號覆蓋,真正的MPI調用實際上是PMPI_*MPI_*被定義爲ELF系統上的弱別名)。這不需要更改MPI庫代碼。它應該適用於任何MPI實現,但只有用戶內存才能被正確調試,即在MPI庫代碼中可能檢測到誤報(儘管這些不一定是誤報,並且可能意味着庫本身很麻煩)。

對於MPICH中的Valgrind支持也是如此。