资源描述:
《CHAP4-指令级并行》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、计算机体系结构第四章指令集并行秦杰郑丽萍张庆辉河南工业大学信息学院2006年2月4.1指令级并行的概念4.2指令的动态调度4.3控制相关的动态解决技术4.4多指令流出技术4.1指令级并行的概念当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行。(Instruction-LevelParallelism,简记为ILP)本章研究:如何通过各种可能的技术,获得更多的指令级并行性。(硬件技术和软件技术)必须要硬件技术和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行。1.流水线处理器的实际CPICPI流水线=CPI理想+各
2、类停顿周期数的总和流水线的理想CPI是流水线的最大流量。各类停顿包括:结构相关停顿:是由于两条指令使用同一个功能部件而导致的停顿。控制相关停顿:是由于指令流的改变(如分支指令)而导致的停顿。RAW、WAR和WAW停顿:由数据相关造成的。减少其中的任何一种停顿,都可以有效地减少CPI,从而提高流水线的性能。2.本章要研究的技术以及它们所克服的停顿技术主要克服的停顿章节基本流水线调度数据先写后读相关停顿4.1循环展开控制相关停顿4.1寄存器换名数据写后写相关和先读后写相关停顿4.1指令动态调度(记分牌和Tomasulo算法)各种数据相关停顿4.2动态分支预测控制相关停顿4.3前瞻(Spec
3、ulation)所有数据/控制相关停顿4.3多指令流出(超标量和超长指令字)提高理想CPI4.43.几个概念基本程序块一段除了入口和出口以外不包含其它分支的线性代码段。程序平均每6~7条指令就会有一个分支。循环体中指令之间的并行性称为循环级并行性。开发循环体中存在的并行性。最常见、最基本是指令级并行研究的重点之一。最基本的开发循环级并行的技术指令调度(scheduling)技术循环展开(loopunrolling)技术换名(renaming)技术4.1.1循环展开调度的基本方法1.指令调度通过改变指令在程序中的位置,将相关指令之间的距离加大到不小于指令执行延迟,将相关指令转化为无关指令
4、。指令调度是循环展开的技术基础。2.编译器在完成这种指令调度时,受限于以下两个特性:程序固有的指令级并行性流水线功能部件的执行延迟3.本章使用的浮点流水线的延迟产生结果指令使用结果指令延迟时钟周期数浮点计算另外的浮点计算3浮点计算浮点数据存操作(SD)2浮点数据取操作(LD)浮点计算1浮点数据取操作(LD)浮点数据存操作(SD)0例4.1对于下面的源代码,转换成DLX汇编语言,在不进行指令调度和进行指令调度两种情况下,分析代码一次循环的执行时间。for(i=1;i<=1000;i++)x[i]=x[i]+s;解:(1)变量分配寄存器整数寄存器R1:循环计数器,初值为向量中最高端地址元素
5、的地址。浮点寄存器F2:保存常数S。假定最低端元素的地址为8。(2)DLX汇编语言后的程序Loop:LDF0,0(R1)ADDDF4,F0,F2SD0(R1),F4SUBIR1,R1,#8BNEZR1,Loop(3)程序执行的实际时钟根据表4-2中给出的的延迟,实际时钟如下:指令流出时钟Loop:LDF0,0(R1)1(空转)2ADDDF4,F0,F23(空转)4(空转)5SD0(R1),F46SUBIR1,R1,#87(空转)8BNEZR1,Loop9(空转)10每个元素的操作需要10个时钟周期,其中5个是空转周期。(4)指令调度以后,程序的执行情况SD放在分支指令的分支延迟槽中对存
6、储器地址偏移量进行调整指令流出时钟Loop:LDF0,0(R1)1SUBIR1,R1,#82ADDDF4,F0,F23(空转)4BNEZR1,Loop5SD8(R1),F46一个元素的操作时间从10个时钟周期减少到6个5个周期是有指令执行的,1个空转周期。(5)例子中的问题及解决方案只有LD、ADDD和SD这3条指令是有效操作.占用3个时钟周期而SUBI、空转和BENZ这3个时钟周期都是附加的循环控制开销。循环展开技术多次复制循环体并相应调整展开后的指令和循环结束条件,增加有效操作时间与控制操作时间的比率。也给编译器进行指令调度带来了更大的空间。例4.2体现循环展开技术的特点将例4.1
7、中的循环展开成3次得到4个循环体,再对展开后的指令序列在不调度和调度两种情况下,分析代码的性能。假定R1的初值为32的倍数,即循环次数为4的倍数。解:补偿代码问题寄存器分配展开后的循环体内不重复使用寄存器。F0、F4:用于展开后的第1个循环体F2:保存常数F6和F8:用于展开后的第2个循环体F10和F12:用于第3个循环体F14和F16:用于第4个循环体(1)展开后没有调度的代码流出时钟Loop:LDF0,0(R1)1(空转)2ADDDF4,F