浏览了所有关于分析工具的问题,我惊讶地发现了我以前从未听说过的VTune by Intel。售价700美元,甚至比AQTime还贵。
但是在我决定花大价钱购买AQTime之前,有没有人用过VTune,如果用过,你认为它有没有比AQTime和the other profiling tools for Delphi that are out there更好的选择
发布于 2009-12-21 18:06:20
你可以下载30天的vtune试用版,然后自己试用。
我用过AQTime和VTune。
如果你想测试多线程应用程序,VTune是个不错的选择--它可以帮助我找到内存管理器中的锁,这些锁会减慢应用程序的多线程部分。
第二个区别是VTune是样本剖析器,AQTime是仪器剖析器。两者各有长处和短处,但我个人更喜欢乐器之一。使用instrument profiler,您可以准确地获取函数被调用的次数、此过程的所有调用者等信息,但代价是时间结果不准确- instrumentation profiler改变了处理器执行代码的方式,因此分支预测和缓存的工作方式与实际应用程序和测试应用程序中的工作方式不同。
但最重要的是图形用户界面,在这里AQTime赢了。它是一个功能强大的应用程序,但使用起来非常简单。VTune则完全不同。我浪费了太多的时间在VTune中寻找正确的命令。GUI非常凌乱。
所以除了多线程,我使用的是AQTime。
发布于 2009-12-21 18:50:04
VTune可以读取低级CPU计数器,如分支预测、缓存未命中等。我用它来找出为什么TopMM (多线程扩展内存管理器!)在我的超线程CPU上运行非常慢。是关于64kb内存缓存混叠的。所以它给出了更多深入的信息,它是如何在CPU上运行的,以及为什么某些东西会因为缓存未命中而变慢等。对于真正的优化(最后%),我会使用这两种方法,对于正常的优化,使用AQ或其他(如我的asmprofiler :-) )
发布于 2020-03-06 14:42:30
自从这个问题被提出以来,已经过去了10年。不幸的是,到目前为止似乎什么都没有改变。
多年来,我成功地将VTune放大器与Delphi二进制文件一起使用了好几次。这是可行的,但也很耗时。在某种程度上,我们确实有AQTime的许可证,但我真的不喜欢它。对于一个大项目来说,执行速度太慢了,而且我无法习惯结果的呈现方式。
最新版本的VTune放大器看起来更干净,但它们的工作原理仍然是一样的。大多数情况下,您将看到的是包含调用堆栈内存地址的右列。您要做的是将这些地址与Delphi生成的映射文件中的地址进行匹配(如果您启用了该选项)。需要注意的是: VTune放大器内的调用堆栈和映射文件中的地址被代码段的起始地址偏移。默认值为0x401000 (您可以在映射文件的开头找到它)。因此,您需要在映射文件中搜索调用堆栈中减去偏移量的地址。此外,地址有几个字节的额外偏移量的情况经常发生。不是搜索确切的(偏移量)地址,而是搜索地址附近,然后检查确切的地址属于哪一行。有时也会发生某些地址似乎没有指向适当位置的情况。只需忽略该地址并转到调用堆栈中下一个地址。
将map文件(或等效的Delphi二进制文件)转换为pdb文件可能会使事情变得容易得多。我找不到最新的工具来做这项工作,但我确实在InformIt中找到了对pdb文件格式的描述(由Sven B.Schreiber编写的破解PDB符号文件)。
中间的解决方案将是通过具有读取地图文件并允许快速搜索地址(包括偏移调整和使用邻近搜索)的工具来加速当前过程。如果它允许您跳转到源文件并显示最近匹配的地址,那就更好了。
当然,对于Embarcadero来说,最好的解决方案是在他们的编译器中添加对生成PDB文件的支持,但我使用它们的经验是,它们只会隐藏错误和功能请求,很少会对它们做些什么。在这件事上,我们只能靠自己。
有趣的是,PrimožGabrijelčič在至少两本与Delphi相关的书籍中提到了英特尔的Delphi放大器。精通Delphi编程(2019)提到了它和其他一些程序,但它没有显示更多的信息。如果知道作者是否真的使用过Delphi二进制程序的VTune放大器,以及他是如何去做的,那将是一件很有趣的事情。
https://stackoverflow.com/questions/1938655
复制相似问题