我在C++中编写了一些函数,并想知道这些函数的不同版本将如何影响生成的程序集代码。我将不同的版本放入戈德波特编译器资源管理器工具并查看生成的程序集。这是一个有趣的经验,看到这些差异,以及一些似乎更有效的版本占用了更多的装配线比更冗长的,相比之下,一些更低的版本占用了更多的“中高水平”版本(与我的预期相反)。
由于不能仅仅通过观察行数来判断这些输出的性能,我想知道如何粗略地估计不同版本之间的性能差异?
如果某些代码输出包含比另一个输出更昂贵的ASM调用,那么如何分析不同的输出才能更容易地看到,或者我必须先学习程序集才能做到这一点?
发布于 2017-09-11 09:58:52
正如其他人所指出的,仅仅计算汇编程序指令的时钟周期对于大多数现代CPU体系结构来说都不会给您带来好的结果。在不同的CPU平台上,一段固定的机器代码的执行时间可能会有所不同,即使代码完全相同。因此,比较这些代码段的性能的唯一可靠方法是
显然,学习程序集对于这个过程并不是强制性的(但是如果您想要理解您将观察到的性能差异的根本原因,那么它可能是必需的)。
这可能不是你想听到的答案,我猜你是在期待对某种网络服务的引用,比如戈德博尔特先生的网站,它为你提供工具和硬件,所以你不必自己购买和安装它们。然而,我认为没有免费的服务:合理的性能比较需要真正的、昂贵的硬件,而不是廉价的虚拟机替换,任何能够为你做到这一点的公司都可能试图从他们的投资中获得可观的回报。
发布于 2017-09-11 08:09:50
在您的过程中有两个缺陷:
最后,关于性能优化的一般建议:只有当您发现有必要时才这样做。
发布于 2017-09-11 06:14:30
首先:性能取决于编译器对代码所做的优化,因此您可能希望在编译最终程序的编译器上进行测试。
此外,您还需要测试每个主要生产者和芯片组的代码,因为汇编语言是不同的,类似的指令可以被完全不同的处理。
https://softwareengineering.stackexchange.com/questions/357146
复制相似问题