C++ Valgrind如何估计函数的成本?

C++ Valgrind如何估计函数的成本?,c++,valgrind,C++,Valgrind,我试图弄清楚程序分析是如何工作的。我用的是Valgrind。我的第一个问题是: 功能的成本对Valgrind意味着什么?时间是什么 据我所知,Valgrind似乎在虚拟机上运行该程序,该虚拟机应该是镜像“通用计算机”。然后统计此计算机中发生的事件。但是它如何从这些数据计算函数的成本呢?在一台标准台式电脑上可以测量小于1毫秒的时间吗 编辑: 请询问callgrind输出中的一维数字“成本”是什么意思?是的,时间可以测量,在标准台式PC上不到1毫秒(如果您是指具有英特尔处理器)。有一个名为rtds

我试图弄清楚程序分析是如何工作的。我用的是Valgrind。我的第一个问题是:

功能的成本对Valgrind意味着什么?时间是什么

据我所知,Valgrind似乎在虚拟机上运行该程序,该虚拟机应该是镜像“通用计算机”。然后统计此计算机中发生的事件。但是它如何从这些数据计算函数的成本呢?在一台标准台式电脑上可以测量小于1毫秒的时间吗

编辑:


请询问callgrind输出中的一维数字“成本”是什么意思?

是的,时间可以测量,在标准台式PC上不到1毫秒(如果您是指具有英特尔处理器)。有一个名为
rtdsc
的汇编指令可以执行此操作

功能的成本对Valgrind意味着什么?时间是什么

假设您指的是Cachegrind和Callgrind工具,它们并不衡量“成本”;它们测量在模拟处理器上运行程序所收集的特定统计数据,包括:

  • 缓存读取和未命中
  • 执行和预测失误的条件和间接分支
有关详细信息,请参阅

其他探查器测量每个函数的运行时间,或者使用采样来确定程序在哪些函数中花费的时间最多

在一台标准台式电脑上可以测量小于1毫秒的时间吗


是的,大多数现代计算机都有精度不到一微秒的计时器,现代英特尔处理器允许您计算CPU周期。但是Valgrind不测量运行时间,因为这在它的模拟机器上是没有意义的。

这不适用于Valgrind,它是一台虚拟(非真实)机器。他说是一台标准PC,我想我错过了read@迪特里切普:-)谢谢你!我的意思是一台真正的物理PC。谢谢!因此,如果我理解正确,在我的文章中的输出中,分析器测量执行的指令数,但不关心指令的成本。马丁德罗兹迪克:是这样吗;看起来您的输出程序使用了单词“cost”来表示“事件数”,其中事件类型在第一列中给出。因此,在执行该函数的过程中读取了1531843733条指令。Callgrind的文档中说,代价是“事件计数(数据读取、缓存未命中等)”。自我成本是仅在该职能中产生的成本;包含成本包括函数调用的所有成本。()在屏幕截图中,您可以看到“成本”实际上是“指令读取访问”事件的度量。