У меня есть приложение, которое использует 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)
Ссылки на связанные с этим вопросы: [ссылка 1] (https://github.com/open-mpi/ompi/issues/2166) и [ссылка 2] (http://stackoverflow.com/questions/11218056/can -someone-explain-this-valgrind-error-with-open-mpi) –
Valgrind [output] (https://drive.google.com/file/d/0B871wCRylUoWQlMtTVI5WV9OWTg/view?usp=sharing) с помощью версии MPICH: 3.2. –
[Ссылка] (https://drive.google.com/file/d/0B871wCRylUoWT2RvV0ZuZ3ZzVFk/view?usp=sharing) к источникам –