有没有办法让valgrind使用多处理器?
我正在使用valgrind的callgrind进行一些瓶颈分析,并注意到我的应用程序与在valgrind/callgrind之外运行时的资源使用行为有很大的不同。
当在valgrind外运行时,它会占用最多的几个处理器,但在valgrind内运行时只使用一个。这让我担心我的瓶颈会在不同的地方,从而使我的分析无效。
发布于 2011-03-24 03:17:59
根据Valgrind文档,它们不支持多处理器:
关于线程化程序,主要要指出的是,您的程序将使用本机线程库,但是
会序列化执行,因此一次只有一个(内核)线程在运行。这种方法避免了实现真正的多线程版本的Valgrind的可怕的实现问题,但它确实意味着线程应用程序只在一个CPU上运行,即使您有多处理器或多核计算机。
Valgrind本身并不调度线程。它只使用简单的锁定方案来确保一次只有一个线程运行。实际的线程调度仍然在操作系统内核的控制之下。然而,这确实意味着,当您的程序在Valgrind上运行时,它将看到与正常运行时截然不同的调度。这既是因为Valgrind正在序列化线程,也是因为代码的运行速度比正常情况下慢得多。
如果您有某种并发、关键竞争、锁定或类似的bug,这种调度上的差异可能会导致您的程序表现不同。在这种情况下,您可以考虑使用工具Helgrind和/或DRD来跟踪它们。
发布于 2015-11-06 15:40:56
看一下:
http://valgrind.org/docs/manual/manual-core.html#manual-core.pthreads_perf_sched
他们补充说:
--fair-sched option这可能会有所帮助。
https://stackoverflow.com/questions/5410001
复制相似问题