Конфигурирование 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