【问题标题】:Can someone explain this valgrind output with open mpi?有人可以用 open mpi 解释这个 valgrind 输出吗?
【发布时间】:2017-02-16 08:42:50
【问题描述】:

我有一个使用 OpenMPI 并在 Windows 和 Linux 上启动的应用程序。 Windows 版本运行良好,但是在 Linux 上运行会导致内存分配错误。某些需要更多计算的应用程序参数会出现问题。 为了消除内存泄漏,我使用 Valgrind 检查了 Linux 版本的应用程序并得到了一些 output。毕竟,我尝试搜索有关输出的信息,并在堆栈溢出和 GitHub 上找到了一些帖子(没有足够的声誉来附加链接)。毕竟,我将 openMPI 更新到 2.0.2 并再次检查应用程序。新output。是 OpenMPI 中的内存泄漏还是我做错了什么?

一段输出:

==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 版本:Open 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) 

【问题讨论】:

标签: c++ memory-management memory-leaks valgrind openmpi


【解决方案1】:

这些输出指向 MPI 库中的一些内存泄漏,而不是您的应用程序代码。您可以放心地忽略它们。

更具体地说,这些泄漏来自发射器。 ORTE 是 OpenMPI 的运行时环境,负责启动和管理 MPI 进程。 Hydra 是 MPICH 的启动器和进程管理器。

【讨论】:

    【解决方案2】:

    术语“肯定丢失”是指程序在第 13 行的主要功能(据我在输出中看到的)直接泄漏内存或调用其他导致内存泄漏的函数(orterun)。您必须修复这些漏洞或提供更多代码。

    先看看here

    【讨论】:

    • 但是,一个 main.c 文件不属于我的源文件
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多