Конфигурирование valgrind для MPICH: неверный файл libmpi*.so используется

При запуске valgrind для обнаружения ошибок в MPI-приложении я получаю следующую ошибку:

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

Я обнаружил следующее: в документации Valgrind (раздел 4.9.1) говорится, что "предполагается, что обертываемые функции MPI находятся в общем объекте 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 ответ

У меня была эта проблема сама. Надеюсь, это может указать вам правильное направление. К сожалению, 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/

Как только он у вас есть, ключом является настройка переменных env, как они упоминаются в документации.

Дополнительные примечания - https://wiki.mpich.org/mpich/index.php/Support_for_Debugging_Memory_Allocation - https://fs.hlrs.de/projects/marmot/publications/paralleldebugging-ppt.pdf

Другие вопросы по тегам