有没有办法让valgrind使用多个处理器?
我正在使用valgrind的callgrind进行一些瓶颈分析,并注意到我的应用程序与在valgrind / callgrind之外运行时的资源使用行为明显不同。
当在valgrind外部运行时,它最多可以输出几个处理器,但是在valgrind中运行只使用一个处理器。这让我担心我的瓶颈会在不同的地方,从而使我的分析无效。
答案 0 :(得分:16)
根据Valgrind Docs,他们不支持多个处理器:
主要指出的是 对线程程序的尊重就是这样 你的程序将使用本机 线程库,但Valgrind 序列化执行只有一个 (内核)线程一次运行。 这种方法避免了可怕的 实施问题 实现真正的多线程 Valgrind的版本,但确实意味着 线程应用程序只在一个上运行 CPU,即使你有一个多处理器 或多核机器。
Valgrind没有安排线程 本身。它只是确保了 一个线程一次运行,使用a 简单的锁定方案。实际上 线程调度仍然存在 控制OS内核。这是什么 但是,这意味着你的意思 程序将看到非常不同 在Valgrind上运行时的调度 它在正常运行时会发生。这是 因为Valgrind是连续剧 线程,因为代码运行 这比平常慢得多。
调度的这种差异可能 导致你的程序行为 不同的是,如果你有某种 并发,关键竞赛,锁定, 或类似的,错误。在那种情况下你 可能会考虑使用这些工具 Helgrind和/或DRD跟踪它们 下来。
答案 1 :(得分:1)
看看:
http://valgrind.org/docs/manual/manual-core.html#manual-core.pthreads_perf_sched
他们补充道:
--fair-sched option
这可能会有所帮助。