performance - 计算每条指令的周期

标签 performance assembly cpu-architecture

据我了解,计算CPI是指令类型的百分比乘以周期数,对吗?机器类型是否参与此计算?

我遇到一个问题,询问我是否应该建议进行更改。

机器 1:40% R - 5 个周期、30% lw - 6 个周期、15% sw - 6 个周期、15% beq 3 - 周期,在 2.5 GHz 机器上

机器 2:40% R - 5 个周期、30% lw - 6 个周期、15% sw - 6 个周期、15% beq 4 - 周期,在 2.7 GHz 机器上

根据我的计算,机器 1 的 CPI 为 5.15,而机器 2 的 CPI 为 5.3。是否可以忽略机器的 GHz 并说更改不是一个好主意,或者我是否必须将机器考虑在内?

最佳答案

我认为重点是评估设计更改,该更改使指令需要更多时钟,但允许您提高时钟频率。 (即倾向于像 Pentium 4 这样的速度恶魔设计,而不是像 Apple 的 A7/A8 ARM 内核那样的大脑。http://www.lighterra.com/papers/modernmicroprocessors/)

因此,您需要计算每秒的指令数,以了解哪一个指令能在相同的实时时间内完成更多的工作。(clock/sec)/(clocks/insn) = insn/sec,从单位中抵消时钟

您的 CPI 计算结果看起来不错;我没有检查它,但是是的,根据指令组合的周期的加权平均值。


这些数字显然是 super 简化的;任何值得在 2.5GHz 构建的 CPU 都会有某种分支预测,因此分支的成本不仅仅是 3 或 4 条指令泡沫。每条指令平均花费约 5 个周期是可悲的。 (大多数流水线设计的目标是每个时钟至少 1 条指令。)

缓存和超标量 CPU 还会导致指令之间发生复杂的交互,具体取决于它们是否依赖于早期结果。

但这有点像考虑将 L1d 缓存加载使用延迟增加 1 个周期(例如)时您可能会做的事情,如果这将其从关键路径上移开并让您提高时钟频率。反之亦然,以降低频率为代价来缩短延迟或减少管道级数。

关于performance - 计算每条指令的周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52195320/

相关文章:

c++ - 如何为c++代码找到对应的程序集

assembly - 汇编变量是如何实现的?

c - 无线 NIC 如何在硬件级别和功能上工作?

软件中的位级操作可以是 "fast"吗?

caching - 英特尔酷睿 i7 的缓存规范

python - 在具有大量输入的 for 循环上实现 Pool

android - 尝试将项目从 bitbucket 导入 android studio 时遇到问题 "Repository test has failure"

MIPS 管道停顿 : SW after LW

java - 我什么时候应该使用基元而不是包装对象?

Xcode 编译时间 : which Mac configuration delivers noticeable best performance?