这是对现有线程的跟进(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而不管params的版本是可能的情况之一,所以我不能把“contractCount = 1”并保留它。从虚拟表指针重定向可以消耗2.2秒(contractCount()是一个虚方法)吗?
2 /函数花费3.3s on min(uint1,uint2)(第432行),尽管我使用的wmin版本尽可能对CPU友好。
3 /该函数在第512行花费1.6s,这是一个非常简单的操作,被调用的函数不是虚函数。
所以问题是:为什么这三行代码花了这么多时间?我在俯瞰什么?我怎样才能优化我的代码以使其运行更快?我应该用应用于整个数组的SSE版本的min替换wmin()吗?
非常感谢任何输入。 丹尼尔
修改 看一下程序集,我发现在1 / case中它确实是vfptr使代码“慢”。我用Don Clugston的fastdelegate替换了虚函数的调用,但没有任何性能变化(我不知道为什么)。由于夜莺的评论,附件现在应该包含所有必要的文件。但是,二进制文件无法成功运行,因为它连接到共享内存,其中有100个MB的数据。
答案 0 :(得分:0)
丹尼尔,
我想查看一下你的VTune结果,但不幸的是你没有包含收集结果的二进制模块,所以我无法查看这里应该具有最大价值的程序集。您是否可以使用二进制文件和调试信息文件重新发布项目存档?
我还尝试重新构建您的源代码,但找不到许多头文件:
因此,为了帮助最好拥有这些文件或用于收集数据的二进制文件。