Valgrind с mpi [дубликат]

Я иногда использую это поведение как альтернативу следующему шаблону:

singleton = None

def use_singleton():
    global singleton

    if singleton is None:
        singleton = _make_singleton()

    return singleton.use_me()

Если singleton используется только use_singleton, мне нравится следующий шаблон в качестве замены:

# _make_singleton() is called only once when the def is executed
def use_singleton(singleton=_make_singleton()):
    return singleton.use_me()

Я использовал это для создания экземпляров клиентских классов, которые обращаются к внешним ресурсам, а также для создания dicts или списков для memoization.

Поскольку я не думаю, что этот шаблон хорошо известен, Я поставил короткий комментарий для защиты от будущих недоразумений.

4
задан bartgol 12 December 2011 в 10:48
поделиться

2 ответа

Ты ничего плохого не делаешь. Memcheck ложные срабатывания с valgrind являются общими, лучшее, что вы можете сделать, это подавить их.

Эта страница руководства больше говорит об этих ложных срабатываниях. Цитата ближе к концу:

Обертки должны уменьшить частоту ошибочных ошибок Memcheck в приложениях MPI. Поскольку перенос выполняется на интерфейсе MPI, по-прежнему потенциально может быть большое количество ошибок, сообщаемых в реализации MPI ниже интерфейса. Лучшее, что вы можете сделать, это попытаться их подавить.

8
ответ дан cnicutar 21 August 2018 в 17:59
поделиться

Часто задаваемые вопросы OpenMPI затрагивают эту проблему: http://www.open-mpi.org/faq/?category=debugging#valgrind_clean

Есть много ситуации, когда Open MPI целенаправленно не инициализирует и впоследствии не связывает память, например, путем вызова writev. Кроме того, известно несколько случаев, когда память не была должным образом освобождена при MPI_Finalize.

Это, конечно, не помогает отличить реальные ошибки от ложных срабатываний. Valgrind предоставляет функции для подавления ошибок и предупреждений из определенных контекстов функций.

В попытке облегчить отладку с помощью Valgrind, начиная с версии 1.5, Open MPI предоставляет так называемый файл подавления Valgrind, который может быть передается в командной строке:

mpirun -np 2 valgrind
--suppressions=$PREFIX/share/openmpi/openmpi-valgrind.supp
6
ответ дан Zulan 21 August 2018 в 17:59
поделиться
  • 1
    Обратите внимание, что фильтр предназначен только для неинициализированных данных. в Open MPI есть настоящие утечки памяти. Fortunatly они в основном происходят при завершении, поэтому они не зависят от того, что делает приложение, и поэтому они остаются необнаруженными большую часть времени. – Gilles Gouaillardet 27 October 2017 в 10:08
Другие вопросы по тегам:

Похожие вопросы: