需要帮助计算带有转发的 mips 管道的 CPI
Need help in calculating CPI for mips pipeline with forwarding
你好,我有一道作业题卡在计算机结构中class。
我有一个带有转发和代码的流水线 mips 处理器,我需要计算处理器 CPI。
我知道如果我计算一些东西,我会在 lw 之后出现停顿,而在分支之后会有某种停顿,我还计算了每条指令的频率。
我应该如何计算 CPI?我知道如何为多周期做,但不知道如何为管道做。
非常感谢您提供的任何帮助!
在流水线上下文中,CPU 有可能在每个周期读取并开始执行一条指令。因此,由于 CPI 与执行吞吐量有关,在没有任何数据或控制风险造成停顿的情况下,我们认为每条指令都需要一个周期。
这显然是错误的,因为一条指令需要几个周期才能完成,但是具有 N>>1 条指令的程序将花费 N 个周期,我们可以认为每条指令的周期为 1.
现在,当我们由于内存访问延迟、分支延迟或其他原因而出现停顿时会发生什么?由于这个停顿,我们将不再有每个周期的 1 条指令。在停顿期间,管道将被冻结或获取不正确的指令,总的结果是处理器丢失一个周期。
出于这个原因,我们认为创建 1 个周期的指令会在与 CPI 计算有关的情况下持续 2 个周期。同样,如果有两个周期的停顿,我们认为该指令是 3 个周期,依此类推。
假设 50% 的 ld 指令创建一个停顿,一个 hazard-less ld 将有一个 1 个周期 "duration" 如果有一个停顿,"duration" 是 2 个周期,所以对于 ld,我们平均有 1.5 个周期。
由于分支延迟,还假设分支为 2 个周期。
如果其他指令是 1 个周期,20% 的指令是 ld,另外 20% 是分支,我们有
CPI = 0.20*1.5 + 0.20*2 + 0.6*1=1.3 每条指令周期。
你好,我有一道作业题卡在计算机结构中class。 我有一个带有转发和代码的流水线 mips 处理器,我需要计算处理器 CPI。 我知道如果我计算一些东西,我会在 lw 之后出现停顿,而在分支之后会有某种停顿,我还计算了每条指令的频率。
我应该如何计算 CPI?我知道如何为多周期做,但不知道如何为管道做。
非常感谢您提供的任何帮助!
在流水线上下文中,CPU 有可能在每个周期读取并开始执行一条指令。因此,由于 CPI 与执行吞吐量有关,在没有任何数据或控制风险造成停顿的情况下,我们认为每条指令都需要一个周期。
这显然是错误的,因为一条指令需要几个周期才能完成,但是具有 N>>1 条指令的程序将花费 N 个周期,我们可以认为每条指令的周期为 1.
现在,当我们由于内存访问延迟、分支延迟或其他原因而出现停顿时会发生什么?由于这个停顿,我们将不再有每个周期的 1 条指令。在停顿期间,管道将被冻结或获取不正确的指令,总的结果是处理器丢失一个周期。
出于这个原因,我们认为创建 1 个周期的指令会在与 CPI 计算有关的情况下持续 2 个周期。同样,如果有两个周期的停顿,我们认为该指令是 3 个周期,依此类推。
假设 50% 的 ld 指令创建一个停顿,一个 hazard-less ld 将有一个 1 个周期 "duration" 如果有一个停顿,"duration" 是 2 个周期,所以对于 ld,我们平均有 1.5 个周期。
由于分支延迟,还假设分支为 2 个周期。
如果其他指令是 1 个周期,20% 的指令是 ld,另外 20% 是分支,我们有
CPI = 0.20*1.5 + 0.20*2 + 0.6*1=1.3 每条指令周期。