【问题标题】:Understanding VTune report了解 VTune 报告
【发布时间】:2012-10-01 08:19:59
【问题描述】:

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

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

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

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

所以,我附上整个项目以及 VTune 的结果 herehere

【问题讨论】:

    标签: c++ profiling intel-vtune


    【解决方案1】:

    丹尼尔,

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

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

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

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

    【讨论】:

    • 你好,南丁格尔,非常感谢!我已经更新了原始链接。现在有整个项目(没有很大的 sdf 文件)以及项目使用的整个库集合。
    • 二进制文件现在在那里,谢谢。但是当我尝试让 VTune 使用它们时,它说校验和不匹配。这意味着您可能在收集数据后重新编译了二进制文件。但是要查看程序集,我需要用于收集数据的确切二进制文件。 (我尝试将工具指向发布和调试可执行文件,尽管使用调试可执行文件进行分析通常是一个坏主意,所以我假设您使用的是发布版本)。
    • 另外,我是否正确理解 *.sdf 文件是基准测试的输入文件,所以无论如何我都无法自己运行它?如果是,那么与您收集的结果相匹配的可执行文件是必不可少的。
    • 您好,南丁格尔,感谢您的努力。不幸的是,这很奇怪:(我从 rapidshare 下载了整个 rar 文件,将其放到单独的分区并打开 VS 项目。从那里,我打开了 VTune 报告,一切正常,我能够浏览程序集而无需问题。*.sdf文件是VS生成的文件,用于在编程时更快地查找函数。如果我删除它并重新打开项目,它是重新创建的。所以我想问你,你打开VTune报告的方式是我吗?做了吗?非常感谢!
    • 我终于可以看到结果了 - 但我不得不重新确定 VTune 结果,假设模块确实是相同的。由于某种原因,在我这样做之前,校验和仍然不匹配我。这样做总是存在获得不连贯的二进制与性能数据的风险,但完整性检查似乎表明它没问题。
    猜你喜欢
    • 2014-04-27
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多