2

这是对现有线程(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.6s,这是一个非常微不足道的操作,被调用的函数不是虚拟的..

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

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

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

所以,我在这里这里附上整个项目以及 VTune 的结果

4

1 回答 1

0

丹尼尔,

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

我还尝试重新构建您的源代码,但找不到许多头文件:

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

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

于 2012-10-13T13:17:03.133 回答