您好,我在计算机结构课上遇到一个作业问题。 我有一个带有转发和代码的管道mips处理器,我需要计算处理器CPI。 我知道,如果我计算一些东西,就会在lw之后得到一个停顿,并且在分支之后会有某种停顿,而且我还计算了每条指令的频率。
我应该如何计算CPI?我知道如何在多周期中执行此操作,但不知道如何在管道中执行此操作。
非常感谢您能提供的任何帮助!
答案 0 :(得分:0)
在流水线上下文中,CPU可能能够在每个周期读取并开始执行一条指令。因此,由于CPI与执行吞吐量有关,而没有任何数据或控制危险会导致停顿,因此我们认为每条指令都需要一个周期。
这显然是错误的,因为一条指令需要几个周期才能完成,但是具有N >> 1条指令的程序将花费N个周期,因此我们可以认为每条指令的周期为1。
现在,当由于内存访问的延迟,分支延迟或其他原因导致停顿时会发生什么?由于此停顿,我们每个周期将不再有1条指令。在停顿期间,流水线将被冻结或获取了不正确的指令,总的结果是处理器失去了一个周期。
因此,我们认为一条针对CPI计算的指令会在最后2个周期中创建一个1个周期的停顿。同样,如果有两个周期的停顿,我们认为指令为3个周期,依此类推。
假设50%的ld指令会造成停顿,那么一个无危害的ld将具有1个周期的“持续时间”,如果存在停顿,则“持续时间”是2个周期,因此我们平均有1.5个周期ld。
还假设由于分支延迟而导致分支为2个周期。
如果其他指令是1个周期,则20%的指令是ld,另外20%的指令是分支,我们有
每个指令的CPI = 0.20 * 1.5 + 0.20 * 2 + 0.6 * 1 = 1.3个周期。