实验四#
实验信息#
| 项目 | 内容 |
|---|
| 实验题目 | 实验四 Tomasulo算法 |
| 课程 | |
| 专业 | 22级 |
| 实验时间 | 2024年11月22日 |
| 实验地点 | |
| 实验环境 | Tomasulo算法模拟器 |
实验目的#
- 加深对指令级并行性及Tomasulo算法的理解
- 熟练掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点数指令以及load和store指令的相关处理
- 掌握给定被执行代码的片段,对于具体某个时钟周期,能够写出保留站、指令状态表以及浮点寄存器状态表内容的变化情况
实验内容#
分析以下指令序列在Tomasulo算法下的执行过程:
L.D F2, 20(R3)
S.D F6, 30(R4)
ADD.D F8, F6, F0
逐周期分析保留站、指令状态表和浮点寄存器状态表的变化。
实验步骤#
- 分析第一个周期:L.D F2,20(R3)流出
- 分析第二个周期:S.D F6,30(R4)流出,L.D进入执行阶段
- 分析第三个周期:ADD.D F8,F6,F0流出
- 分析第四个周期:L.D写结果,S.D写结果
- 分析第五个周期:ADD.D写结果
| 指令 | 指令状态表 | 指令状态表 | 指令状态表 |
|---|
| 指令 | 流出 | 执行 | 写结果 |
| L.D F2, 20(R3) | √ | | |
| Store F6, 30(R4) | | | |
| ADD.D F8, F6, F0 | | | |
| 名称 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 |
|---|
| 名称 | Busy | Op | Vj | Vk | Qj | Qk | A |
| Load | √ | L.D | Regs[R3] | | 0 | | 20 |
| Store | × | | | | | | |
| Add | × | | | | | | |
| 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 |
|---|
| F0 | F2 | F4 | F6 | F8 | F10 | … | F30 |
| Qi | | Load | | | | | | |
| 指令 | 指令状态表 | 指令状态表 | 指令状态表 |
|---|
| 指令 | 流出 | 执行 | 写结果 |
| L.D F2, 20(R3) | √ | √ | |
| Store F6,30(R4) | √ | | |
| ADD.D F8,F6,F0 | | | |
| 名称 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 |
|---|
| 名称 | Busy | Op | Vj | Vk | Qj | Qk | A |
| Load | √ | L.D | R3 | | 0 | | 20+[R3] |
| Store | √ | S.D | R4 | F6 | 0 | 0 | 30 |
| Add | × | | | | | | |
| 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 |
|---|
| F0 | F2 | F4 | F6 | F8 | F10 | … | F30 |
| Qi | | Load | | | | | … | |
| 指令 | 指令状态表 | 指令状态表 | 指令状态表 |
|---|
| 指令 | 流出 | 执行 | 写结果 |
| L.D F2, 20(R3) | √ | √ | |
| Store F6, 30(R4) | √ | √ | |
| ADD.D F8, F6, F0 | √ | | |
| 名称 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 |
|---|
| 名称 | Busy | Op | Vj | Vk | Qj | Qk | A |
| Load | √ | L.D | R3 | | 0 | | 20+R3 |
| Store | √ | S.D | R4 | F6 | 0 | 0 | 30+R4 |
| ADD | √ | ADD.D | F6 | F0 | 0 | 0 | |
| 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 |
|---|
| F0 | F2 | F4 | F6 | F8 | F10 | … | F30 |
| Qi | | Load | | | ADD | | | |
| 指令 | 指令状态表 | 指令状态表 | 指令状态表 |
|---|
| 指令 | 流出 | 执行 | 写结果 |
| L.D F2, 20(R3) | √ | √ | √ |
| Store F6, 30(R4) | √ | √ | √ |
| ADD.D F8, F6, F0 | √ | √ | |
| 名称 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 |
|---|
| 名称 | Busy | Op | Vj | Vk | Qj | Qk | A |
| Load | × | | | | | | |
| Store | × | | | | | | |
| ADD | √ | ADD.D | F6 | F0 | 0 | 0 | |
| 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 |
|---|
| F0 | F2 | F4 | F6 | F8 | F10 | … | F30 |
| Qi | | | | | ADD | | | |
| 指令 | 指令状态表 | 指令状态表 | 指令状态表 |
|---|
| 指令 | 流出 | 执行 | 写结果 |
| L.D F2, 20(R3) | √ | √ | √ |
| Store F6, 30(R4) | √ | √ | √ |
| ADD.D F8, F6, F0 | √ | √ | √ |
| 名称 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 | 保留站 |
|---|
| 名称 | Busy | Op | Vj | Vk | Qj | Qk | A |
| Load | × | | | | | | 20 |
| Store | × | | | | | | |
| ADD | × | | | | | | |
| 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 | 寄存器状态表 |
|---|
| F0 | F2 | F4 | F6 | F8 | F10 | … | F30 |
| Qi | | | | | | | … | |