【问题标题】:Does/can Valgrind use multiple processors?Valgrind 是否/可以使用多个处理器?
【发布时间】:2011-07-21 13:36:53
【问题描述】:

有没有办法让 valgrind 使用多个处理器?

我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind 之外运行时存在显着不同。

在 valgrind 外部运行时,它会使用多个处理器,但在 valgrind 内部运行时只使用一个。这让我担心我的瓶颈会在不同的地方,从而使我的分析无效。

【问题讨论】:

  • 你不能使用另一个分析器,例如:oprofile

标签: c++ profiling multicore valgrind


【解决方案1】:

根据 Valgrind 文档,它们不支持多处理器:

要指出的主要内容 关于线程程序是 您的程序将使用本机 线程库,但 Valgrind 序列化执行,以便只有一个 (内核)线程一次运行。 这种方法避免了可怕的 的实施问题 实现真正的多线程 Valgrind 的版本,但这确实意味着 线程应用程序仅在一个上运行 CPU,即使你有一个多处理器 或多核机器。

Valgrind 不调度线程 本身。它只是确保只有 一个线程同时运行,使用 简单的锁定方案。实际上 线程调度仍然在 操作系统内核的控制。这是什么 但是,这确实意味着您的 程序会看到非常不同的 在 Valgrind 上运行时的调度比 正常运行时会这样。这是 都是因为 Valgrind 正在序列化 线程,并且因为代码运行 比平时慢很多。

这种调度差异可能 使您的程序正常运行 不同的是,如果你有某种 并发,关键竞争,锁定, 或类似的,错误。在这种情况下,你 可以考虑使用工具 Helgrind 和/或 DRD 跟踪他们 下来。

【讨论】:

  • 仅适用于 Memcheck,还是适用于所有工具,如 Helgrind?
【解决方案2】:

看看:

http://valgrind.org/docs/manual/manual-core.html#manual-core.pthreads_perf_sched

他们补充说:

--fair-sched option

这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多