- 1、本文档共137页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性流水 每一任务不会争用同一个流水段 非线性流水 反馈回路,多个任务争用同一个流水段的冲突现象 3.3 非线性流水线的调度 启动距离 向一天非线性流水线的输入端连续输入两个任务之间的时间间隔称为非线性流水线的启动距离 预约表 二维表,横向表示时间,纵向表示流水线的段 根据预约表写出禁止表F 根据禁止表写出初始冲突表 3.3 非线性流水线的调度 根据初始冲突向量C0画出状态转换图 根据状态转换图写出最优调度方案 3.4 流水线的相关与冲突 无法将LD指令的结果定向到DADD指令 3.4 流水线的相关与冲突 流水线互锁机制插入气泡后的执行过程 3.4 流水线的相关与冲突 LD R1,0(R2) IF ID EX MEM WB DADD R4,R1,R5 IF ID EX MEM WB AND R6,R1,R7 IF ID EX MEM WB XOR R8,R1,R9 IF ID EX MEM WB LD R1,0(R2) IF ID EX MEM WB DADD R4,R1,R5 IF ID stall EX MEM WB AND R6,R1,R7 IF stall ID EX MEM WB XOR R8,R1,R9 stall IF ID EX MEM 插入停顿前后的流水线时空图 3.4 流水线的相关与冲突 LD Rb,B IF ID EX MEM WB LD Rc,C IF ID EX EX MEM WB WB DADD Ra,Rb,Rc IF ID stall EX MEM WB SD Ra ,A IF stall ID EX MEM WB 依靠编译器解决数据冲突 让编译器重新组织指令顺序来消除冲突,这种技术 称为指令调度或流水线调度。 例如:采用典型的代码生成方法, 表达式A=B+C的代码会导致暂停 调度前的代码 调度后的代码 LD Rb,B LD Rc,C DADD Ra,Rb,Rc SD Ra,A LD Re,E LD Rf,F DSUB Rd,Re,Rf SD Rd,D LD Rb,B LD Rc,C LD Re,E DADD Ra,Rb,Rc LD Rf,F SD Ra,A DSUB Rd,Re,Rf SD Rd,D 举例: 请为下列表达式生成没有暂停的指令序列: A=B+C ; D=E-F ; 假设载入延迟为1个时钟周期。 题解 3.4 流水线的相关与冲突 控制冲突 执行分支指令的结果有两种 分支成功:PC值改变为分支转移的目标地址。 在条件判定和转移地址计算都完成后,才改变PC值。 不成功或者失败:PC的值保持正常递增, 指向顺序的下一条指令。 处理分支指令最简单的方法: “冻结”或者“排空”流水线 。 优点:简单。 前述5段流水线中,改变PC值是在MEM段进行的。 给流水线带来了3个时钟周期的延迟。 将上述实现方案修改为流水线实现 一个经典的5段流水线 每一个周期作为一个流水段。 在各段之间加上锁存器(流水寄存器)。 3.4 流水线的相关与冲突 5段流水线的两种描述方式 第一种描述(类似于时空图) 第二种描述(按时间错开的数据通路序列) 采用流水线方式实现时,应解决以下几个问题: 要保证不会在同一时钟周期要求同一个功能段做 两件不同的工作。 例如,不能要求ALU同时做有效地址计算和算术运算。 避免IF段的访存(取指令)与MEM段的访存(读/写数据)发生冲突。 可以采用分离的指令存储器和数据存储器; 一般采用分离的指令Cache和数据Cache。 ID段和WB段都要访问同一寄存器文件。 ID段:读 WB段:写 3.4 流水线的相关与冲突 3.4 流水线的相关与冲突 如何解决对同一寄存器的访问冲突? 把写操作安排在时钟周期的前半拍完成,把读操作安排在后半拍完成。 考虑PC的问题 流水线为了能够每个时钟周期启动一条新的指令,就必须在每个时钟周期进行PC值的加4操作,并保留新的PC值。这种操作必须在IF段完成,以便为取下一条指令做好准备。 (需设置一个专门的加法器) 但分支指令也可能改变PC的值,而且是在MEM段进行,这会导致冲突。 请考虑一下,如何处理分支指令
文档评论(0)