- 1、本文档共292页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第4章指令级并行;4.1 指令级并行的概念
4.2 指令的动态调度
4.3 控制相关的动态解决技术
4.4 多指令流出技术;4.1 指令级并行的概念;1.流水线处理器的实际CPI;2.本章要研究的技术以及它们所克服的停顿;3.几个概念;最基本的开发循环级并行的技术
指令调度(scheduling)技术
循环展开(loopunrolling)技术
换名(renaming)技术
;4.1.1 循环展开调度的基本方法;3.本章使用的浮点流水线的延迟;例4.1
对于下面的源代码,转换成DLX汇编语言,在不进行指令调度和进行指令调度两种情况下,分析代码一次循环的执行时间。
for(i=1;i=1000;i++)
x[i]=x[i]+s;;解:(1)变量分配寄存器
整数寄存器R1:循环计数器,初值为向量
中最高端地址元素的地址。
浮点寄存器F2:保存常数S。
假定最低端元素的地址为8。
(2)DLX汇编语言后的程序
Loop: LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
SUBI R1,R1,#8
BNEZ R1,Loop ;(3)程序执行的实际时钟;(4)指令调度以后,程序的执行情况;(5)例子中的问题及解决方案;例4.2体现循环展开技术的特点;解:;(1)展开后没有调度的代码;结果分析:;(2)对指令序列进行优化调度;结果分析:;4.循环展开和指令调度时要注意的问题;4.1.2相关性;1.数据相关(datadependence);指令的相关距离(distance)
两条指令之间的指令条数。
分析数据相关的主要工作:
(1)确定指令的相关性,找到所有可能产生停
顿的地方。
(2)确定必须严格遵守的数据的计算顺序。
(3)确定指令的最大相关距离,确定程序中可
能的最大并行性。;2.名相关(namedependence);消除名相关;例:我们对例4.2编译过程进行分析,来仔细考察
换名的过程。
(1)首先,仅仅去除4遍循环体中的分支指令,
得到以下由17条指令构成的指令序列:;;(2)编译器可以通过对相关链上存储器访问偏移量的直接调整,将前3条SUBI指令消除掉,从而得到下面一个14条指令构成的指令序列:;Loop: LD F0,0(R1)
ADDDF4,F0,F2
SD 0(R1),F4
LD F0,-8(R1)
ADDDF4,F0,F2
SD -8(R1),F4
LD F0,-16(R1)
ADDDF4,F0,F2
SD -16(R1),F4
LD F0,-24(R1)
ADDD F4,F0,F2
SD -24(R1),F4
SUBIR1,R1,#32
BNEZR1,Loop
;(3)通过寄存器换名,消除名相关。
得到右边的指令序列:;3.控制相关(controldependence)
;处理控制相关的两个原则:
(1)与控制相关的指令不能移到分支指令之
前,即控制有关的指令不能调度到分支
指令控制范围以外;
(2)与控制无关的指令不能移到分支指令之
后,即控制无关的指令不能调度到分支
指令控制范围以内。
;再考察例4.2:
假设循环展开时,循环控制分支指令没有去除,
则指令序列如下:;Loop:LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
SUBI R1,R1,#8
BEQZ R1,Exit
LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
SUBI R1,R1,#8
BEQZ R1,Exit
;4.2 指令的动态调度;4.2.1动态调度的原理;为了允许乱序执行,我们将基本流水线的译码阶段
再分为两个阶段:
(1)流出(Issue,IS):指令译码,检查是否存
在结构阻塞。
文档评论(0)