MPI_Abort и динамически выделяемая память

Я учусь программировать в MPI на C, и мне не удалось найти, что происходит с динамически выделяемой памятью (malloc/calloc) во всех процессах из MPI-коммуникатора/группы, когда один из процессов вызывает MPI_Abort.

Неосвобождение динамически выделенной памяти может привести к сбоям в работе/непредсказуемому поведению? Это считается утечкой?


person Lucian Bredean    schedule 22.03.2017    source источник


Ответы (1)


MPI_Abort() аналогичен exit():

Эта подпрограмма делает «лучшую попытку» прервать все задачи в группе comm. Эта функция не требует, чтобы вызывающая среда предпринимала какие-либо действия с кодом ошибки. Однако среда Unix или POSIX должна обрабатывать это как возврат кода ошибки из основной программы.

(спецификация MPI 3.1)

Там, где это эффективно для прерывания процессов, любая динамически выделяемая память, удерживаемая этими процессами, возвращается обратно в ОС. Динамические распределения не сохраняются после завершения процесса. Так,

Неосвобождение динамически выделенной памяти может привести к сбоям в работе/непредсказуемому поведению?

В некоторой степени.

Это считается утечкой?

Утечек памяти malloc()ed или calloc()ed в результате работы MPI_Abort() нет. Утечка памяти актуальна только в контексте продолжающегося выполнения процесса.

person John Bollinger    schedule 22.03.2017
comment
Я решил удалить, спасибо за вариант :) Ваш ответ более точно решает проблемы. - person ryyker; 22.03.2017