c++ - 探查器报告的时间与真实时间 - 为什么会出现差异?

标签 c++ visual-studio-2008 windows-xp intel-vtune

我有两段代码执行相同的操作。一大块是自己写的,另一 block 是第三方写的。它们都被编译成一个可执行文件。第三方代码似乎能够比我的更快地完成工作。与我的 500 次相比,它每秒可以执行 1,500 次操作。然后我在 VTune 中运行可执行文件,使用调用图分析选项,希望这能揭示我在哪里浪费了时间。不幸的是,VTune 诊断显示了它认为每个函数所花费的微秒数,它声称​​我的函数和第三方函数每次调用都花费了大约 0.002 秒。这对于我的代码来说是正确的,但与我对第三方代码速度的(手动)测量完全不一致。

这怎么会发生?

编辑:两个代码块都很大,并且调用它们自己的复杂子函数树。

编辑:我应该指出,第三方代码是纯 C++,而我的代码本质上是刚刚在 C++ 编译器中编译的 C 代码。

编辑:VTune 是一个非常复杂的包,包含大量我不理解的配置选项。是否可以使用一些设置来减少这种不准确性?

最佳答案

您对“真实时间”的定义可能需要修改。在比较苹果和梨时,你不能声称分析器是错误的。

分析器可用于相对计时;使用探查器找到代码中的“热点”,然后使用该信息优化该区域。

实际注意事项:寻找采样分析器,它通常比跟踪/检测分析器具有更少的开销/影响

(PS 另请阅读薛定谔/海森堡)

关于c++ - 探查器报告的时间与真实时间 - 为什么会出现差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716049/

相关文章:

IIS、XP、SSL 与 KeepAlives

java - 应用程序无法在 win7 上成功更改 dscp 值

c++ - 为什么在执行 "character + 1"时没有我告诉它这样做就发生了类型转换?

python - 为什么使用python调用c++程序时静态变量没有释放

c++ - 如何打印最长公共(public)子序列?

unit-testing - 清理ReSharper的TestResults文件?

asp.net - 启动 ASP.NET 开发服务器,然后在浏览器中打开的 .BAT 文件

c++ - GCC - 'sizeof' 之前的预期不合格 ID - Android NDK 中的 IT++ 4.2

visual-studio-2008 - 在安装vs2010\silverlight 4之后在vs2008中调试Silverlight 3

command-line - 批处理脚本 - 更改桌面上文件夹的图标 (Windows XP)