首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何评估汇编程序代码的效率?

如何评估汇编程序代码的效率?
EN

Software Engineering用户
提问于 2017-09-10 21:10:16
回答 5查看 1.9K关注 0票数 0

我在C++中编写了一些函数,并想知道这些函数的不同版本将如何影响生成的程序集代码。我将不同的版本放入戈德波特编译器资源管理器工具并查看生成的程序集。这是一个有趣的经验,看到这些差异,以及一些似乎更有效的版本占用了更多的装配线比更冗长的,相比之下,一些更低的版本占用了更多的“中高水平”版本(与我的预期相反)。

由于不能仅仅通过观察行数来判断这些输出的性能,我想知道如何粗略地估计不同版本之间的性能差异?

如果某些代码输出包含比另一个输出更昂贵的ASM调用,那么如何分析不同的输出才能更容易地看到,或者我必须先学习程序集才能做到这一点?

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2017-09-11 09:58:52

正如其他人所指出的,仅仅计算汇编程序指令的时钟周期对于大多数现代CPU体系结构来说都不会给您带来好的结果。在不同的CPU平台上,一段固定的机器代码的执行时间可能会有所不同,即使代码完全相同。因此,比较这些代码段的性能的唯一可靠方法是

  • 获取要比较的编译器
  • 获取一个或多个硬件和操作系统平台进行比较
  • 将要比较的代码片段嵌入到某个基准程序中(最简单的形式是:一个循环,调用代码段数百万次,并测量总运行时间)
  • 使用可用的优化选项(可能为要比较的每个平台量身定做),使用每个编译器编译基准。
  • 然后运行程序并在每个平台上进行测量。

显然,学习程序集对于这个过程并不是强制性的(但是如果您想要理解您将观察到的性能差异的根本原因,那么它可能是必需的)。

这可能不是你想听到的答案,我猜你是在期待对某种网络服务的引用,比如戈德博尔特先生的网站,它为你提供工具和硬件,所以你不必自己购买和安装它们。然而,我认为没有免费的服务:合理的性能比较需要真正的、昂贵的硬件,而不是廉价的虚拟机替换,任何能够为你做到这一点的公司都可能试图从他们的投资中获得可观的回报。

票数 8
EN

Software Engineering用户

发布于 2017-09-11 08:09:50

在您的过程中有两个缺陷:

  • 您正在测试特定的工具(戈德螺栓编译器资源管理器工具),并查看它的输出,这肯定会与生产质量的编译器的输出不同(这也在很大程度上取决于您选择的优化设置)。
  • 使用现代CPU,仅仅通过读取程序集代码就几乎不可能预测运行时间。

最后,关于性能优化的一般建议:只有当您发现有必要时才这样做。

  • 从编写结构良好、可读的代码开始。
  • 决定是否有任何性能问题。“如果它没坏,就别修好它”。
  • 如果有问题,使用分析器找出真正的瓶颈(我敢打赌,你会惊讶于它在哪里)。
  • 找到一个解决这个瓶颈的方法(也许是通过微观优化,也许是通过改变算法.)
  • 再次配置文件,以检查您的更改是否真的有效。
  • 如果仍然太慢,用下一个瓶颈重复。
票数 4
EN

Software Engineering用户

发布于 2017-09-11 06:14:30

首先:性能取决于编译器对代码所做的优化,因此您可能希望在编译最终程序的编译器上进行测试。

此外,您还需要测试每个主要生产者和芯片组的代码,因为汇编语言是不同的,类似的指令可以被完全不同的处理。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/357146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档