Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 理解VTune报告_C++_Profiling_Intel Vtune - Fatal编程技术网

C++ 理解VTune报告

C++ 理解VTune报告,c++,profiling,intel-vtune,C++,Profiling,Intel Vtune,这是对现有线程的后续操作(http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application)-我发现不是缓存阻碍了我的应用程序。长话短说,我有一个应用程序,它在一个函数中花费了70%的运行时间(22个函数中有15秒)。因此,我希望尽可能减少该函数的运行时间,因为该函数的预期用途是用于更大的数据(即22秒不是计划的运行时间:) 问题是VTune的输出让我感到困惑,代码似乎花

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

问题是VTune的输出让我感到困惑,代码似乎花费了大量时间在完全意想不到的地方。我已经没有想法了,所以我把我的项目和分析器的结果放在这里

看看incriminateEvaluateExits()函数,这些东西让我感到困惑:

1/该函数恰好花费2.2秒调用一个内联函数,该函数返回1,而不考虑参数(第425行,this->contractManager->contractCount()。注意:函数返回1而不考虑参数的版本是一种可能的情况,因此我不能将“contractCount=1”放在这里,保持这样。来自虚拟表指针的重定向是否会占用这2.2秒(contractCount()是一个虚拟方法)

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

3/函数在第512行上花费1.6秒,这是一个非常简单的操作,被调用的函数不是虚拟函数

所以问题是:为什么这三行代码要花这么多时间?我忽略了什么?我如何优化代码以使其运行更快?我是否应该将wmin()替换为应用于整个阵列的SSE版本的min

非常感谢您的任何意见。 丹尼尔

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

因此,我附上整个项目,再加上VTune的结果和

Daniel

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

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

  • 一些Qt头(我没有安装Qt,也不是这样做的专家)
  • parameterHolder.h文件
  • externFloatConsts.h文件
因此,为了提供帮助,最好有这些文件或用于收集数据的二进制文件。

Daniel

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

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

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

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

你好,南丁格尔,非常感谢!我已经更新了原始链接。现在有了整个项目(没有sdf文件,它很大)和项目使用的所有库集合。二进制文件现在在那里,谢谢。但当我试图让VTune使用它们时,它会说校验和不匹配。这意味着您可能在收集数据后重新编译二进制文件。但要查看程序集,我需要用于收集数据的确切二进制文件。(我尝试将该工具指向release和debug可执行文件,但使用debug可执行文件进行评测通常是个坏主意,因此我假设您使用了release)。此外,我是否正确理解*.sdf文件是基准测试的输入文件,因此我无论如何都无法自己运行它?如果是,那么与您收集的结果相匹配的可执行文件是必不可少的。您好,南丁格尔,谢谢您的努力。不幸的是,这很奇怪:(我从rapidshare下载了整个rar文件,将其放在一个单独的分区中,并打开了VS项目。从那里,我打开了VTune报告,一切正常,我可以毫无问题地浏览程序集。*.sdf文件是VS生成的文件,用于编程时更快地查找函数。如果我删除它并打开该项目重新ct,它被重新创建。所以我想问你,你是否像我那样打开VTune报告?非常感谢!!我终于可以看到结果了-但我不得不重新确定VTune结果,因为假设模块实际上是相同的。出于某种原因,在我这样做之前,校验和对我来说仍然不匹配。在这样做的过程中始终存在获取不一致的二进制与性能数据的风险,但健全性检查似乎表明这是正常的。你好,南丁格尔,非常感谢!我已经更新了原始链接。现在有了整个项目(没有sdf文件,它很大)以及项目使用的所有库集合。二进制文件现在都在那里,谢谢。但是当我试图让VTune使用它们时,它会说校验和不匹配。这意味着您可能在收集数据后重新编译二进制文件。但是要查看程序集,我需要