c++ - valgrind callgrind是使用total time还是 "execution time"来创建数据

标签 c++ valgrind callgrind

我有一个问题,我的应用程序随线程数线性扩展(想想 800 个线程在双核 CPU 上的性能是 400 个线程的两倍)。我的直觉告诉我线程正在休眠或被阻塞......但我在 callgrind 中看不到它。

callgrind 也测量函数时间,或者只是线程处于事件状态以创建数据的时间。如果不清楚我问的是什么......线程做

i ++;

2秒,然后

sleep(1);//thread will not be scheduled to run for min 1 second...  

... i++ 将大约为调用图的 100% 或大约 66%。

最佳答案

Valgrind 收集用户时间统计数据,而不是实时统计数据。因此,如果线程相互干扰,您将不会在 Valgrind 中看到它。您将得到的只是执行每个函数所花费的实际时间。

关于c++ - valgrind callgrind是使用total time还是 "execution time"来创建数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8577261/

相关文章:

c++ - 如何从命令行在 OSX 上的 callgrind 输出中获取有意义的函数名称?

linux - kcachegrind 的控制台替代品?

c++ - 根据标志在最小堆和最大堆之间切换

c++ - 如何创建 sqlite3 内存数据库?

c++ - C++ Boost 库中的链接错误

c++ - 在多线程环境中交换 c++ 映射对象

c++ - 使用 Valgrind 工具如何检测哪个对象试图访问 0x0 地址?

c++ - Valgrind 未显示使用不正确的 c_str() 的无效内存访问

c - 即使没有内存泄漏,Valgrind 也会出现无效读取错误

linux - 我可以依靠 valgrind/callgrind 的绝对成本来衡量和比较不同的实现吗?