通过关于分析工具的所有问题,我很惊讶地发现了我之前没有听说过的VTune by Intel。 700美元,比AQTime更贵。
但在我决定放弃AQTime的大笔资金之前,有没有人使用VTune for Delphi,如果是这样,你认为它有什么好处可能使它成为比AQTime和{{3}更好的选择}?
答案 0 :(得分:8)
VTune可以读取低级CPU计数器,例如分支预测,缓存未命中等。我用它来找出为什么TopMM(多线程扩展内存管理器!)在我的超线程CPU上非常慢。是关于64kb内存缓存别名的东西。因此,它提供了更多的内容信息,它是如何真正在CPU上运行的,以及为什么由于缓存未命中而导致某些事情变慢 对于真正的最优化(最后%),我会使用两者,对于正常的最优化使用AQ或其他(如我的asmprofiler :-))
答案 1 :(得分:5)
您可以下载30天的vtune试用版并自行试用。
我使用过AQTime和VTune。
如果你想测试多线程应用程序,VTune很好 - 它帮助我在内存管理器中找到锁,这会减慢我的多线程部分应用程序。
Secend的区别在于VTune是样本分析器,而AQTime是仪器分析器。 两者都有强点和弱点,但我个人更喜欢乐器。 使用仪器分析器,您可以准确了解调用函数的次数,此过程的所有调用者以及不准确时间结果的成本 - 检测分析器更改处理器执行代码的方式,因此分支预测和缓存的工作方式与实际和经过测试的应用程序不同工作缓慢。
但最重要的是GUI和AQTime获胜。 它功能强大,但使用起来非常简单。 VTune完全不同。我失去了太多时间在VTune找到正确的命令。 GUI非常混乱。
除了多线程之外,我使用AQTime。
答案 2 :(得分:1)
问了问题已经十多年了。不幸的是,到目前为止,似乎一切都没有改变。
多年来,我已经多次成功地将VTune Amplifier与Delphi二进制文件结合使用。这是可行的,但也很耗时。在某个时候,我们确实获得了AQTime的许可证,但是我真的不喜欢它。对于一个大型项目,执行速度太慢了,我无法适应结果的呈现方式。
VTune Amplifier的最新版本看起来更干净,但是它们仍然可以工作。大多数时候您将看到的是带有调用堆栈的内存地址的右列。您要做的就是将这些地址与Delphi生成的地图文件中的地址进行匹配(如果启用该选项)。只是一个小警告:VTune Amplifier内部的调用栈中的地址和映射文件被代码部分的起始地址所偏移。默认值为0x401000(您可以在地图文件的开头找到它)。因此,您将需要在映射文件中搜索调用堆栈中的地址减去偏移量。此外,经常发生这种情况,以致该地址具有几个字节的额外偏移量。而不是搜索确切的(偏移)地址,而是搜索地址附近,然后检查确切的地址属于哪一行。有时还会发生某些地址似乎没有指向正确位置的情况。只需忽略该地址,然后转到调用堆栈中的下一个地址即可。
将映射文件(或等效的Delphi二进制文件)转换为pdb文件可能会使事情变得容易得多。我找不到最新的工具来完成这项工作,但确实在InformIt中找到了pdb文件格式的描述(Sven B. Schreiber破解了PDB符号文件)。
一种中间解决方案是通过使用一种工具来读取地图文件并允许快速搜索地址(包括偏移量调整和使用附近搜索)来加快当前过程。如果允许您跳转到源文件并显示最近匹配的地址,则更好。
当然,最好的解决方案是让Embarcadero在其编译器中添加对生成PDB文件的支持,但我的经验是,它们只是ho积bug和功能请求,很少对它们做任何事情。我们独自一人。
有趣的是,PrimožGabrijelčič至少在两本与Delphi相关的书中提到了英特尔的VTune Amplifier。 Mastering Delphi Programming(2019)提到了它以及其他一些程序,但是没有显示更多信息。知道作者是否真的将VTune Amplifier与Delphi二进制一起使用,以及他的工作方式,将会很有趣。