2016-03-07 74 views
0

我只使用一個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 ==系統調用PARAM writev可以獲得(矢量[...])指向未初始化字節(一個或多個)

==在0x54DC150 30450 ==:__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/LIB /了openmpi/LIB /了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/LIB /運算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是在0x4C2DEAE alloc'd

== 30450 ==大小256的塊內的字節161:realloc的(在/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/LIB /的openmpi/LIB/libmpi.so.1.0.8)

== 30450 ==由0x4EFA3DD:orte_grpcomm_base_pack_modex_entries(在/usr/lib/openmpi/lib/libmpi.so.1.0.8)

== 30450 ==由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 == HEAP內容:

== 30450 ==在使用中在出口處:7740個allocs:在1482塊

== 30450 ==總堆使用298974個字節,6258米的FreeS,13223431個字節分配

... ... ...

== == 30450泄漏摘要:

== == 30450失去了肯定:51132個字節69塊

== 30450 ==間接丟失:14378個字節在39塊

== 30450 ==可能丟失:0字節0塊

== 30450 ==仍可達:233464個在1374字節塊

== 30450 ==抑制:0字節0塊

== 30450個==可達塊(那些其中指針被發現)未示出。

== == 30450要看到他們後,再重新用:--leak檢查=全 - 顯示,泄漏種=所有

== == 30450

== == 30450對於檢測和抑制的錯誤,重新運行的計數:-v

== == 30450使用--track-起源= yes來看到未初始化值來自

== == 30450 ERROR摘要:63來自63個上下文的錯誤(被抑制:來自0的0)

它有基於memorycheck結果的內存泄漏。 由於這個例子是由openmpi-1.4開發者提供的,這是否意味着每個使用openmpi-1.4作爲庫文件的程序都會遇到內存泄漏? Fred

+0

除了答案:OpenMPI 1.4已超過四年。您可能需要考慮更新。 – Zulan

回答

0

由於性能原因,OpenMPI不是valgrind-clean。但是,根據the FAQ,提供了壓縮文件。

mpirun -np 2 valgrind --suppressions=$PREFIX/share/openmpi/openmpi-valgrind.supp