- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 指令级并行及其开发——硬件方法
张晨曦 刘依
曹强 (review)
caoqiang@hust.edu.cn;5.1 指令级并行的概念
5.2 相关与指令级并行
5.3 指令的动态调度
5.4 动态分支预测技术
5.5 多指令流出技术;指令级并行:指指令之间存在的一种并行性,利用它,计算机可以并行执行两条或两条以上的指令。
(ILP:Instruction-Level Parallelism)
开发ILP的途径有两种
资源重复,重复设置多个处理部件,让它们同时执行相邻或相近的多条指令;
采用流水线技术,使指令重叠并行执行。
本章研究:如何利用各种技术来开发更多的指令级并行 (硬件的方法)
;开发ILP的方法可以分为两大类
主要基于硬件的动态开发方法
基于软件的静态开发方法
流水线处理机的实际CPI
理想流水线的CPI加上各类停顿的时钟周期数:
CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突
+ 停顿控制冲突
理想CPI是衡量流水线最高性能的一个指标。
IPC:Instructions Per Cycle
(每个时钟周期完成的指令条数);5.1 指令级并行的概念;5.1 指令级并行的概念;;5.2 相关与指令级并行;5.2 相关与指令级并行;5.2 相关与指令级并行;5.2 相关与指令级并行;静态调度
依靠编译器对代码进行静态调度,以减少相关和冲突。
它不是在程序执行的过程中、而是在编译期间进行代码调度和优化。
通过把相关的指令拉开距离来减少可能产生的停顿。
动态调度
在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿。
;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;;5.3 指令的动态调度;;;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;;5.3 指令的动态调度;5.3 指令的动态调度;5.3 指令的动态调度;指令流出
浮点运算指令
进入条件:有空闲保留站(设为r)
操作和状态表内容修改:
if (Qi[rs] ≠ 0) // 检测第一操作数是否就绪
? RS[r].Qj ? Qi[rs] ?; //第一操作数没有就绪,进行寄存器换名,即把将产生该操作数的保留站的编号放入当前保留站的Qj。该编号是一个大于0的整数。
else ? RS[r].Vj ? Regs[rs] ; //第一操作数就绪。把寄存器rs
// 中的操作数取到当前保留站的Vj。
RS[r].Qj ? 0 ? //置Qj为0,表示当前保留站的Vj中
//的操作数就绪 。
;if (Qi[rt] ≠ 0) // 检测第二操作数是否就绪
? RS[r].Qk ? Qi[rt] ; //第二操作数没有就绪,进行寄存器换名,即把将产生该操作数的保留站的编号放入当前保留站的Qk。该编号是一个大于0的整数。
else ? RS[r].Vk ? Regs[rt] ; //第二操作数就绪。把寄存器rt中
//的操作数取到当前保留站的Vk。
RS[r].Qk ? 0 ? // 置Qk为0,表示当前保留站的Vk中
文档评论(0)