2017-02-16 22 views
1

У меня есть приложение, которое использует OpenMPI и запускает его в Windows и Linux. Версия для Windows работает нормально, однако при запуске Linux возникает ошибка выделения памяти. Проблема возникает для некоторых аргументов приложения, которые требуют большего количества вычислений. Чтобы устранить утечки памяти, я проверил приложение версии Linux с помощью Valgrind и получил output. В конце концов, я попытался найти информацию о выходе и нашел некоторые сообщения о переполнении стека и GitHub (недостаточно репутации для присоединения ссылок). В конце концов, я обновляю openMPI до 2.0.2 и снова проверяю приложение. Новый output. Является ли утечка памяти в OpenMPI, или я делаю что-то неправильно?Может кто-нибудь объяснить этот выход valgrind с открытым mpi?

Кусок выхода:

==16210== 4 bytes in 1 blocks are definitely lost in loss record 5 of 327 
==16210== at 0x4C2DBB6: malloc (vg_replace_malloc.c:299) 
==16210== by 0x5657A59: strdup (strdup.c:42) 
==16210== by 0x51128E6: opal_basename (in /home/vshmelev/OMPI_2.0.2/lib/libopen-pal.so.20.2.0) 
==16210== by 0x7DDECA9: ??? 
==16210== by 0x7DDEDD4: ??? 
==16210== by 0x6FBFF84: ??? 
==16210== by 0x4E4EA9E: orte_init (in /home/vshmelev/OMPI_2.0.2/lib/libopen-rte.so.20.1.0) 
==16210== by 0x4041FD: orterun (orterun.c:818) 
==16210== by 0x4034E5: main (main.c:13) 

OpenMPI версия: Открытый MPI: 2.0.2
Valgrind версия: Valgrind-3.12.0
Виртуальная машина характеристика: Ubuntu 16.04 LTS x64

В в случае использования MPICH выход Valgrind:

==87863== HEAP SUMMARY: 
==87863==  in use at exit: 131,120 bytes in 2 blocks 
==87863== total heap usage: 2,577 allocs, 2,575 frees, 279,908 bytes allocated 
==87863== 
==87863== 131,120 bytes in 2 blocks are still reachable in loss record 1 of 1 
==87863== at 0x4C2DBB6: malloc (vg_replace_malloc.c:299) 
==87863== by 0x425803: alloc_fwd_hash (sock.c:332) 
==87863== by 0x425803: HYDU_sock_forward_stdio (sock.c:376) 
==87863== by 0x432A99: HYDT_bscu_stdio_cb (bscu_cb.c:19) 
==87863== by 0x42D9BF: HYDT_dmxu_poll_wait_for_event (demux_poll.c:75) 
==87863== by 0x42889F: HYDT_bscu_wait_for_completion (bscu_wait.c:60) 
==87863== by 0x42863C: HYDT_bsci_wait_for_completion (bsci_wait.c:21) 
==87863== by 0x40B123: HYD_pmci_wait_for_completion (pmiserv_pmci.c:217) 
==87863== by 0x4035C5: main (mpiexec.c:343) 
==87863== 
==87863== LEAK SUMMARY: 
==87863== definitely lost: 0 bytes in 0 blocks 
==87863== indirectly lost: 0 bytes in 0 blocks 
==87863==  possibly lost: 0 bytes in 0 blocks 
==87863== still reachable: 131,120 bytes in 2 blocks 
==87863==   suppressed: 0 bytes in 0 blocks 
==87863== 
==87863== For counts of detected and suppressed errors, rerun with: -v 
==87863== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 
+0

Ссылки на связанные с этим вопросы: [ссылка 1] (https://github.com/open-mpi/ompi/issues/2166) и [ссылка 2] (http://stackoverflow.com/questions/11218056/can -someone-explain-this-valgrind-error-with-open-mpi) –

+0

Valgrind [output] (https://drive.google.com/file/d/0B871wCRylUoWQlMtTVI5WV9OWTg/view?usp=sharing) с помощью версии MPICH: 3.2. –

+0

[Ссылка] (https://drive.google.com/file/d/0B871wCRylUoWT2RvV0ZuZ3ZzVFk/view?usp=sharing) к источникам –

ответ

0

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

В частности, эти утечки поступают из пусковых установок. ORTE - среда выполнения для OpenMPI, ответственная за запуск и управление процессами MPI. Hydra является диспетчером и менеджером процессов для MPICH.

0

Термин "определенно потерянный "означает основную функцию вашей программы в строке 13 (насколько я вижу на выходе) происходит утечка памяти непосредственно или вызывает некоторую другую функцию (orterun), которая вызывает утечку памяти. вы должны исправить эти утечки или предоставить еще один код.

посмотреть here прежде всего.

+0

Однако файл main.c не относится к моим исходным файлам –