首页 > 解决方案 > 带有流水线的 cpu 中的 CPI

问题描述

考虑在 CPU 中,加法指令的 CPI 为 0.5(它通过流水线在一个周期内执行两条加法指令)。因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。

但是当根据公式只有一个加法指令时,我们将 1 * 0.5 * 2 相乘,这是不正确的。因为执行加法指令至少需要一个时钟周期。

标签: cpu-architecture

解决方案


考虑在 CPU 中,加法指令的 CPI 为 0.5(它通过流水线在一个周期内执行两条加法指令)

但是当根据公式只有一个加法指令时,我们将 1 * 0.5 * 2 相乘,这是不正确的。

您正在混淆延迟和吞吐量。

吞吐量描述了在给定时间内可以执行的操作数。您使用的 CPI 是一种吞吐量。因此,如果您说 CPI=0.5,您的意思是每个周期可以提供 2 个添加结果。

延迟是指令(或操作、内存读取等)开始到结束之间时间的度量。它与吞吐量无关,并且与处理器中的阶段数相关。

所以如果你看一个单独的add指令,它的持续时间显然不是半个周期。最近 pentium 中的流水线在 14 到 19 个周期之间(但旧版本的流水线要长两倍)。单个添加的持续时间约为 15 个周期(最多)。

因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。

不会。其他因素可能会产生影响,例如依赖关系以及与其他指令的一般交互。CPI 被引入作为衡量完整程序中每条指令的平均周期数的指标。当前计算机的复杂性使得在不执行程序的情况下几乎不可能准确估计 CPI。因此,为了得到它,我们对程序进行计时,然后除以执行指令的数量。这将考虑到内存访问、依赖关系、分支错误预测等,这对于想要知道其程序速度的最终用户来说是有意义的。您的估计是理论上的估计,在现实生活中从未发生过。


推荐阅读