Valgrind /可以使用多个处理器吗?

Cat*_*kul 11 c++ profiling valgrind multicore

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

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

当在valgrind外部运行时,它最多可以输出几个处理器,但是在valgrind中运行只使用一个处理器.这让我担心我的瓶颈会在不同的地方,从而使我的分析无效.

bdk*_*bdk 17

根据Valgrind Docs,他们不支持多个处理器:

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

Valgrind不会自己安排线程.它仅使用简单的锁定方案确保一次只运行一个线程.实际的线程调度仍然在OS内核的控制之下.但是,这意味着你的程序在Valgrind上运行时会看到与正常运行时不同的调度.这是因为Valgrind将线程序列化,并且因为代码运行速度比正常情况慢得多.

如果您有某种并发,严重竞争,锁定或类似的错误,这种调度差异可能会导致您的程序行为不同.在这种情况下,您可以考虑使用Helgrind和/或DRD工具来跟踪它们.