gpt4 book ai didi

c++ - 了解 VTune 报告

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:01 25 4
gpt4 key购买 nike

这是对现有线程的跟进 (http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) - 我发现它不是阻碍我的应用程序的缓存.长话短说,我有一个应用程序,它在一个函数上花费了 70% 的运行时间(22 秒中的 15 秒)。因此,我想尽可能地缩短这个函数的运行时间,因为该函数的预期用途是用于更大的数据(即 22 秒不是计划的运行时间:)

问题是 VTune 的输出让我感到困惑,代码似乎在绝对意想不到的地方花费了大量时间。我的想法已经用完了,所以我在这里发布了我的项目和探查器结果。

看看有罪的 evaluateExits() 函数,这些事情让我很困惑:

1/该函数恰好花费 2.2 秒调用一个无论参数如何都返回 1 的内联函数(第 425 行,this->contractManager->contractCount())。注意:无论参数如何,函数返回 1 的版本是可能的情况之一,因此我不能放置“contractCount=1”并保持这样。来自虚拟表指针的重定向是否会耗尽这 2.2 秒(contractCount() 是一个虚拟方法)?

2/该函数在 min(uint1, uint2)(第 432 行)上花费了 3.3 秒,尽管我使用的 wmin 版本应该尽可能对 CPU 友好。

3/该函数在第 512 行花费了 1.6 秒,这是一个非常微不足道的操作,并且被调用的函数不是虚函数..

那么问题来了:为什么这三行代码要花这么多时间?我忽略了什么?我如何优化我的代码以使其运行得更快?我应该用适用于整个数组的 min 的 SSE 版本替换 wmin() 吗?

非常感谢任何输入。丹尼尔

编辑:查看程序集,我发现在 1/的情况下,确实是 vfptr 使代码“变慢”。我用 Don Clugston 的 fastdelegate 替换了对虚函数的调用,但没有发生任何性能变化(我不知道为什么)。由于 Nightingale 的评论,附件现在应该包含所有必要的文件。但是,二进制文件无法成功运行,因为它连接到共享内存,其中有 100 MB 的数据。

因此,我附上了整个项目以及 VTune 的结果 herehere

最佳答案

丹尼尔,

我想看看您的 VTune 结果,但不幸的是您没有包括收集结果的二进制模块,所以我无法在此处查看应该具有最大值(value)的程序集。您可以重新发布包含二进制文件和调试信息文件的项目存档吗?

我也尝试重新构建您的源代码,但是找不到一些头文件:

  • 一些 Qt 头文件(我没有安装 Qt,也不是这方面的专家)
  • parameterHolder.h文件
  • externFloatConsts.h 文件

因此,为了提供帮助,最好拥有这些文件或用于收集数据的二进制文件。

关于c++ - 了解 VTune 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com