【发布时间】:2014-10-01 15:56:19
【问题描述】:
我是堆栈溢出的新手,希望就如何解决我遇到的问题获得一些建议。由于几乎没有组装经验,我很难推断我拥有的一段代码的性能特征。代码是在 PowerPC 架构(旧的 Apple G5)上用 C 语言编写的。使用 O3 和其他一些优化运行代码,代码实际上比仅使用 O3 慢 30%。汇编代码之间的区别归结为几条指令(比如 3-4)及其排列方式。
我的问题是由于我缺乏经验,我很难理解为什么汇编输出在一种情况下表现更差,而在另一种情况下表现更好。 oprofile 之类的工具在这里并没有真正的帮助,查看官方的 IBM 指令文档并没有提供任何关于特定指令的性能特征的见解(至少到目前为止我所看到的)。如何解决这类分析问题?如前所述,我在装配和管道分析方面几乎没有经验,因此我将不胜感激有关通常如何解决此类问题的任何建议。有什么工具可以帮助我吗?
另外,我对编译器生成代码的方式并不感兴趣(从某种意义上说,我对原始 C 代码的工作方式并不感兴趣),我真的只对理解程序集感兴趣性能分析。
更新
我只想简要介绍一下这个问题 - 通过使用 IBM 的 PowerPC 管道模拟器,可以准确地看到管道中发生了什么,因此更容易理解问题(结果是与问题队列已满和调度组形成有关的问题)。我建议任何遇到类似问题的人使用管道模拟器,这将有助于理解程序的性能!由于强大机器的复杂性,如果不使用流水线模拟器,似乎很难分析程序的性能特征。这可能意味着为了真正了解您的程序如何影响性能,有必要了解运行代码的架构。
【问题讨论】:
-
这是一个很大的主题,对于 StackOverflow 而言,这个问题太宽泛了 - 尝试选择一个小的具体示例,然后发布源代码和汇编代码并提出一个非常具体的问题。跨度>
-
我知道这是一个大而广泛的主题,但欢迎任何可能帮助我解决问题的指针。明天我会尝试添加示例汇编代码
-
哪些指令看起来比较慢?
-
G5 处理器是特定的(例如与 G4 处理器相比):调度组、一些微编码的委托、更深的管道……如果您专门为 G5 编译程序,并且如果您使用 gcc,您是否尝试过选项 -mcpu=970 和 -mtune=970 ?
标签: performance assembly powerpc