assembly - 显示汇编代码的 cpu 周期和延迟的分析器工具
问题描述
我记得在过去,当为第一部 iPhone 开发代码时,XCode 有一个名为 Shark 的分析工具。虽然 Shark IIRC 可以使用时间采样代码进行定期分析,但当我优化代码的热瓶颈时,有一个功能非常有用。
该工具将逐行显示汇编指令,并且对于每一行显示它需要执行多少个 cpu 周期以及它必须为之前的指令停止多长时间。
指令的周期显示为 X:Y,其中 X 是 CPU 周期的总数,Y 是在执行下一条指令之前需要多少个周期(只要它不依赖于该指令的结果)。“停止”显示下一行的执行停止了多长时间,因为它取决于前一条指令的结果。
这使我能够重组我已经高度优化的代码,通过优化流水线指令并用指令隐藏所有延迟,使其再次快两到三倍。
是否还有这样的工具可以做到这一点?很明显,周期时间取决于执行它的特定 cpu,但我想这样的工具将允许选择架构来显示时间,或者是特定架构的特定工具(在我的情况下,我主要是有兴趣针对英特尔至强 SP 1 和 2 进行优化)
//编辑:虽然很明显现代 CPU 非常复杂(能够无序执行指令或有多个可以并行运行的执行单元),但这种分析仍然是可能的,并且有这样的指令延迟表(和各种架构的累积指令延迟):https ://www.agner.org/optimize/instruction_tables.pdf
解决方案
推荐阅读
- javascript - 如何使用 Vue.js 下载图像而不显示它们?
- python - 序列化程序调用显示 TypeError:“ListSerializer”类型的对象不是 JSON 可序列化的?
- vuejs2 - 实现:无法在 Dropdown._makeDropdownFocusable 处设置属性“tabIndex”为空
- swift - 如何获取 MacOS Xcode 项目中使用的 sparkle 框架的当前版本
- android - Android 7.0:自定义通知声音不再起作用
- npm - Gitlab CI:在存储库中创建 dist 文件夹?
- ios - 如何在 Swift 中为按钮的属性不重复代码?
- .net - “Stripe.Infrastructure.StripeTypeRegistry”的类型初始化器抛出异常?
- arrays - Angular 仅显示符合 *ngIf 特定条件的数组元素?
- swift - UITest MacOS Click to MenuBar 应用程序不起作用