1
- PC: 取出PC,更新
Inst Memory: 取指令
Decode: 译码
regfile: 取出rs1,写入rd
ALU: 计算加法
control: 译码
MUX: 选择数据 - PC: 取出PC,更新
Inst Memory: 取指令
Decode: 译码
regfile: 取出rs1, rs2
ALU: 计算加法
control: 译码
Branch: 比较大小
MUX: 选择数据 - (1) beq,bne,bge,blt,bgeu,bltu
(2) lb,lh,lw,lbu,lhu
(3) sb,sw,sh
2
- T(流水线)=250ps, T(单周期)=1020ps
-
t(流水线)= 1004\times250ps=251ns
t(单周期)= 1000\times1020ps=1020ns
加速比为 4.06
3.
| Inst\cycle | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
add x1, x1, x3 |
IF | ID | EX | MEM | WB | ||||
add x2, x1, x4 |
IF | ID | EX | MEM | WB | ||||
lw x3, 0(x2) |
IF | ID | EX | MEM | WB | ||||
add x5, x3, x6 |
IF | ID | ID | EX | MEM | WB |
3
-
Inst\cycle 1 2 3 4 5 6 7 8 9 (10) ld x10, 0(x13)IF ID EX MEM WB IF ID ld x11, 8(x13)IF ID EX MEM WB IF add x12, x10, x11IF ID ID EX MEM WB subi x13, x13, 16IF IF ID EX MEM WB bnez x12, LOOPIF ID EX MEM WB nopIF ID nopIF
每次 8 周期。
- 假设分支预测可以在 IF 阶段预测下一条跳转指令的位置
| Inst\cycle | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | (10) |
|---|---|---|---|---|---|---|---|---|---|---|
ld x10, 0(x13) |
IF | ID | EX | MEM | WB | IF | ID | |||
ld x11, 8(x13) |
IF | ID | EX | MEM | WB | IF | ||||
add x12, x10, x11 |
IF | ID | ID | EX | MEM | WB | ||||
subi x13, x13, 16 |
IF | IF | ID | EX | MEM | WB | ||||
bnez x12, LOOP |
IF | ID | EX | MEM | WB |
节约 2 个周期。
4
- 静态预测:向后不跳向前跳
- 1-bit predictor: 和上一次一样
- 2-bit Saturating Counter: 2-bit state,跳+1,不跳-1,>=2时跳,很常见
- 对不同位置的分支分别保存几次历史
- 保存全局的分支跳转历史,并和上一条并用
- 对函数返回的专门优化
- etc.
发表回复