cpu 的 CPI 与流水线
CPI in cpu's with pipelining
考虑在CPU中,add指令的CPI为0.5(它通过流水线在一个周期内执行两条add指令)。
因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。
但是当只有一条加法指令时,根据公式我们乘以1 * 0.5 * 2,这是不正确的。因为执行加法指令至少需要一个时钟周期。
Consider that in a CPU, the CPI for add instruction is 0.5 (it performs two add instructions in one cycle via pipelining)
but when there is only a one add instruction according to the formula we multiply 1 * 0.5 * 2 which is not correct.
您混淆了延迟和吞吐量。
吞吐量描述了在给定时间内可以执行的操作数。您使用的 CPI 是吞吐量。所以,如果你说 CPI=0.5,你的意思是你每个周期可以交付 2 个添加结果。
延迟 是指从指令(或操作、内存读取等)开始到结束之间的时间量度。它与吞吐量无关,与处理器中的级数相关。
所以如果你看一个单独的add
指令,它的持续时间显然不是半个周期。最近的奔腾流水线在 14 到 19 个周期之间(但旧版本的流水线长两倍)。并且单个添加的持续时间约为 15 个周期(最多)。
So when we want to calculate the CPU time for 10 add instructions we multiply 10 * 0.5 * 2 (clock cycle time is 2 Nanoseconds) and everything is all right.
没有。其他因素可能会产生影响,如依赖性,以及与其他指令的一般交互。引入 CPI 是为了衡量完整程序中每条指令的平均周期数。目前计算机的复杂性使得在不执行程序的情况下几乎不可能准确估计 CPI。因此,为了得到它,我们对程序计时,然后除以已执行指令的数量。这将考虑内存访问、依赖性、分支预测错误等,这对于想要了解其程序速度的最终用户来说是有意义的。您的估计是理论上的估计,在现实生活中从未发生过。
考虑在CPU中,add指令的CPI为0.5(它通过流水线在一个周期内执行两条add指令)。 因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。
但是当只有一条加法指令时,根据公式我们乘以1 * 0.5 * 2,这是不正确的。因为执行加法指令至少需要一个时钟周期。
Consider that in a CPU, the CPI for add instruction is 0.5 (it performs two add instructions in one cycle via pipelining)
but when there is only a one add instruction according to the formula we multiply 1 * 0.5 * 2 which is not correct.
您混淆了延迟和吞吐量。
吞吐量描述了在给定时间内可以执行的操作数。您使用的 CPI 是吞吐量。所以,如果你说 CPI=0.5,你的意思是你每个周期可以交付 2 个添加结果。
延迟 是指从指令(或操作、内存读取等)开始到结束之间的时间量度。它与吞吐量无关,与处理器中的级数相关。
所以如果你看一个单独的add
指令,它的持续时间显然不是半个周期。最近的奔腾流水线在 14 到 19 个周期之间(但旧版本的流水线长两倍)。并且单个添加的持续时间约为 15 个周期(最多)。
So when we want to calculate the CPU time for 10 add instructions we multiply 10 * 0.5 * 2 (clock cycle time is 2 Nanoseconds) and everything is all right.
没有。其他因素可能会产生影响,如依赖性,以及与其他指令的一般交互。引入 CPI 是为了衡量完整程序中每条指令的平均周期数。目前计算机的复杂性使得在不执行程序的情况下几乎不可能准确估计 CPI。因此,为了得到它,我们对程序计时,然后除以已执行指令的数量。这将考虑内存访问、依赖性、分支预测错误等,这对于想要了解其程序速度的最终用户来说是有意义的。您的估计是理论上的估计,在现实生活中从未发生过。