Я просто использовать Valgrind, чтобы проверить пример представить в OpenMPI-1,4 /, например:OpenMPI и vargrind
mpirun.openmpi --np 2 valgrind --log-file=output.dat --leak-check=full --tool=memcheck ./ring_c
тогда я нашел ниже в output.dat:
== 30450 == Системный вызов парам writev (вектор [...]) указывает на неинициализированных байт (ов)
== 30450 == в 0x54DC150: __writev_nocancel (системных вызовов-template.S: 81)
== 30450 == по 0x7E3B312: mca_oob_tcp_msg_send_handler (в /usr/lib/openmpi/lib/openmpi/mca_oob_tcp.so)
== 30450 == по 0x7E3C50A: mca_oob_tcp_peer_send (в/USR/Библиотека/OpenMPI/Библиотека/OpenMPI/mca_oob_tcp.so)
== 30450 == по 0x7E40266: mca_oob_tcp_send_nb (в /usr/lib/openmpi/lib/openmpi/mca_oob_tcp.so)
== 30450 == по 0x7C2FFB7: orte_rml_oob_send (в /usr/lib/openmpi/lib/openmpi/mca_rml_oob.so)
== 30450 == от 0x7C30637: orte_rml_oob_send_buffer (в/USR/Lib/OpenMPI/Библиотека/оп enmpi/mca_rml_oob.so)
== 30450 == by 0x824CBAE: ??? (В /usr/lib/openmpi/lib/openmpi/mca_grpcomm_bad.so)
== 30450 == по 0x4E900FB: ompi_mpi_init (в /usr/lib/openmpi/lib/libmpi.so.1.0.8) == 30450 == от 0x4EA8499: PMPI_Init (в /usr/lib/openmpi/lib/libmpi.so.1.0.8)
== 30450 == по 0x4009AD: основной (ring_c.c: 19)
== 30450 == Адрес 0x65c0321 составляет 161 байт внутри блока размером 256 alloc'd
== 30450 == в 0x4C2DEAE: перераспределить (в /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
== 30450 == по 0x4F1E619: opal_dss_buffer_extend (в /usr/lib/openmpi/lib/libmpi.so.1.0.8)
== 30450 == по 0x4F1E9D0: opal_dss_copy_payload (в/USR/Библиотека/OpenMPI/Библиотека/libmpi.so.1.0.8)
== 30450 == по 0x4EFA3DD: orte_grpcomm_base_pack_modex_entries (в /usr/lib/openmpi/lib/libmpi.so.1.0.8)
== 30450 == by 0x824CA8F: ??? (В /usr/lib/openmpi/lib/openmpi/mca_grpcomm_bad.so)
== 30450 == по 0x4E900FB: ompi_mpi_init (в /usr/lib/openmpi/lib/libmpi.so.1.0.8)
== 30450 == по 0x4EA8499: PMPI_Init (в /usr/lib/openmpi/lib/libmpi.so.1.0.8)
== 30450 == по 0x4009AD: основная (ring_c.C: 19)
== 30450 == НЕАР РЕЗЮМЕ:
== 30450 == в использовании на выходе: 298,974 байт 1482 блоков
== 30450 == общего использования кучи: 7,740 ALLOCS , 6,258 освобождает, 13,223,431 байт выделено
... ... ...
== 30450 == УТЕЧКИ РЕЗЮМЕ:
== 30450 == определенно потеряно: 51,132 байт в 69 блоках
== 30450 == косвенно потерял: 14,378 байт в 39 блоках
== 30450 == возможно потеряно: 0 байт в 0 блоков
== 30450 == еще достижимые: 233,464 байт 1374 блоки
== 30450 == подавлено: 0 байт в 0 блоков
== 30450 == блоки (зоны доступа, к которым указатель был найден), не показаны.
== 30450 == Чтобы увидеть их, повторно с: --leak-проверки = полная --show-Leak-типа = все
== 30450 ==
== 30450 == для подсчета обнаруженных ошибок и подавленными, повторно с: -v
== 30450 == Используйте --track-происхождение = да, чтобы увидеть, где неинициализированные значения происходят из
== 30450 == ERROR РЕЗЮМЕ: 63 ошибки из 63 контекстов (подавлено: 0 от 0)
У этого есть утечка памяти, основанная на результатах проверки памяти. Поскольку пример предоставляется разработчиками openmpi-1.4, означает ли это, что каждая программа, использующая openmpi-1.4 в качестве библиотеки, встретит утечку памяти? Fred
В дополнение к ответу: OpenMPI 1.4 более четырех лет. Возможно, вы захотите рассмотреть возможность обновления. – Zulan