计算机体系结构-hw8
计算机体系结构-hw8
Problem 1
注:做这道题需要了解一些前置的知识
上图表明了一些指令在一些阶段做了什么事情。
- 如果存在旁路硬件:
- 如果该指令不是访存指令,且存在真数据相关,那么相关的寄存器的值是在ALU阶段完成后取得
- 如果该指令是访存指令,且存在真数据相关,那么相关的寄存器的值是在DM阶段完成后取得
- 如果不存在旁路硬件:
- 无论是什么指令,只要存在数据相关,都在RW(写回到寄存器)阶段取得。
注:第四对指令由于不需要根据R2计算地址,所以跟第三对指令有所不同。
Problem 2
对于分支跳转的语句,往往存在控制相关,因为在获取结果之前,下一条要进入流水线的指令是不确定的。如果我们在获取结果前,停止取指令,那么一定会停顿。所以,我们需要解决这种情况:
- 猜测执行(猜测下一条进入流水线的指令,如果成功,不会浪费周期,如果失败,需要冲刷流水线,浪费周期)
- 分支延迟槽(从分支之前找到一条不存在数据相关性的指令,放入到延迟槽执行,使其不会浪费周期)
题解:
- 对于第一种情况,由于获取结果之前,停止取指令,因此无论结果如何,一定会停顿。100%
- 对于第二种情况,由于采用猜测执行的策略(默认分支不执行),然而分支却有80%的概率执行,因此停顿:80%
- 对于第三种情况,我们分情况进行讨论:
- 如果找不到放入延迟槽的指令,那么100%停顿
- 因为可从前面寻找到一个具有无关性的指令,放入到延迟槽,所以一定不会停顿。0%。
- 因为从分支执行的方向,找一条指令放入到延迟槽。所以,停顿:20%
- 因为从分支不执行的方向,找一条指令放入到延迟槽。所以,停顿:80%
Problem 3
7次展开或5次展开都可以,具体请看以下的汇编代码:
7次展开:
5次展开:
致谢
[1] 以上图片来自于计算机体系结构刘珂老师的课程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现