2

mpi アプリケーションでエラーを検出するために valgrind を実行すると、次のエラーが発生します。

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

Valgrindの ドキュメント(セクション 4.9.1) には、「ラップされる MPI 関数は、libmpi.so* と一致する soname を持つ ELF 共有オブジェクトにあると想定されています。これは、少なくとも 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*".

私の質問は次のとおりです。これをどこでどのように構成しますか?

4

1 に答える 1

1

私はこの問題を自分で抱えていました。うまくいけば、これはあなたを正しい方向に向けることができます. 残念ながら、MPI を valgrind や gdb と連携させるのは非常に難しいことで知られています。

オプション 1 : 適切なパッケージを見つけます。

Fedora/RHEL/(rpm ベース) システムでは、パッケージに OpenMPI 共有ライブラリがありvalgrind-openmpiます。MPICH のバージョンが見つかりませんでした。私はMVAPICHを使用しているので、これは役に立ちませんでした。MPICH/MVAPICH のバージョンが見つかった場合は、ここに追加できるようにコメントしてください。

PBone は、コンテンツに libmpiwrapper 共有オブジェクトがあることを示しています。

オプション 2 : ソースからライブラリをビルドします。(私がMVAPICHのためにしたこと)

ソースから valgrind をコンパイルしてから、共有ライブラリをコピーすることにしました。パッケージ マネージャーのバージョンの valgrind を保持したかったので、ソース コードのバージョンを一致させ、安全のためにデフォルトの GCC を使用しました。おそらく最新かつ最高のものを使用できますが、多くのことを得るとは思えません。

Valgrind をビルドするときは、適切な MPI インストールが検出されることを確認する必要があります。出力をチェックして、共有ライブラリとヘッダー ファイルが正しいことを確認します。私はシステムに複数の MPI をインストールする習慣があるので、これは苦労して学んだことです。autoconf/automake の出力に時間を費やします。幸いなことに、Valgrind のメンテナーはビルドを非常にシンプルに保つという良い仕事をしてくれているので、コンパイル時に大きな問題に遭遇することはありませんでした。

ソースコード http://valgrind.org/downloads/

入手したら、キーはドキュメントに記載されているように環境変数を設定することです。

追記 - https://wiki.mpich.org/mpich/index.php/Support_for_Debugging_Memory_Allocation - https://fs.hlrs.de/projects/marmot/publications/paralleldebugging-ppt.pdf

于 2015-10-18T17:37:54.393 に答える