Scoreboarding主要有三个组成部分:
1.指令状态:
IS:check for structural/WAW hazard; stall issue until clear;
RO:read operands if no RAW hazards
EX:followed by notification to scoreboard
WR: Write result
这里表示着流水线的四个周期。
2.功能单元状态,有九个部分组成:
BUSY | 用来显示这个单元是否正在被占用。 |
fi | 目的寄存器地址,只有一个 |
fj | 源寄存器地址,有两个 |
fk | 另一个源寄存器地址 |
oj | 生产 fj 的功能单元 |
ok | 生产 fk 的功能单元 |
Rj | flag显示 fj 是否ready |
Rk | flag显示 fk 是否ready |
3.寄存器结果状态:
用来显示这个寄存器将会被哪一个功能单元所写。
如果空白表示没有等待的指令将会写这个寄存器。
下面举个例子。
这是初始状态也就是cycle0状态。
cycle1:
instruction 1进入了IS状态。
寄存器F6将要被写。Rk功能单元就绪。
cycle2:
instruction 1进入了RO状态。
这里由于FUS只有一个interger load单元,所以instruction 2指令进不来。由于scoreboarding算法是顺序的,所以instruction 2指令进不来就导致了i2其后的指令都进不来。
cycle4:
直到cycle4,instruction 1已经被执行完,因此寄存器结构状态的F6没有指令要写它了(因为已经写完了)。所以F6清空。
cycle5:
同上面的。
为什么instruction 3不同时进入呢。因为流水线是不允许同时进入IS这个操作的,会导致结构冒险。
cycle6:
此时instruction 3进入IS状态。但此时寄存器F2待写。寄存器F0也进入待写状态。
cycle7:
注意到此时,为什么instruction 3不前进呢?原因就在于我们上面所说的这个F2寄存器被占用着呢,所以Rj处于未就绪状态,所以是不能读操作数的。
cycle8:
同样此时instruction 3也没有前进。下一步就能前进了。
此时instruction 4也没有前进,但下一步就能前进了。
但此时instruction 5也应该进入IS。因为其有操作单元。
然后就是按照刚才所说的方法调度就行了。
【图片来源:sjtu计算机体系结构李超老师的ppt。侵删。】