收藏 分享(赏)

体系结构第4章-第1讲.ppt

上传人:cjc2202537 文档编号:1000753 上传时间:2018-05-14 格式:PPT 页数:34 大小:527KB
下载 相关 举报
体系结构第4章-第1讲.ppt_第1页
第1页 / 共34页
体系结构第4章-第1讲.ppt_第2页
第2页 / 共34页
体系结构第4章-第1讲.ppt_第3页
第3页 / 共34页
体系结构第4章-第1讲.ppt_第4页
第4页 / 共34页
体系结构第4章-第1讲.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第四章 指令级并行,主要内容4.1指令级并行的概念 4.2指令的动态调度4.3控制相关的动态解决技术4.4多指令流出技术,4.1指令级并行的概念,当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行Instruction-Level Parallelism简记为ILP 如何知道指令之间可以并行?硬、软件如何支持指令级并行?如何研究这些问题?硬件技术或者软件技术都可以提高指令级并行性必须要硬件技术和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行,性能评价:CPI计算,流水线处理器的实际CPI(平均每条指令使用的周期数)等于理

2、想流水线的CPI加上各类停顿引起的周期数的总和 CPI流水线= CPI理想+ 停顿结构相关+ 停顿先写后读+ 停顿先读后写+ 停顿写后写+ 停顿控制相关减少其中的任何一种停顿,都可以有效地减少CPI,从而提高流水线的性能,本章研究的技术及克服的停顿,软件和硬件的支持,上述技术中有些技术主要是硬件支持循环展开寄存器换名的动态调度(基本的Tomasulos)动态分支指令预测每个周期多发射前瞻技术所有的技术都必须和软件,特别是编译器合作完成,几个基本概念,基本(程序)块:一段除了入口和出口以外不包含其它分支的线性代码段程序平均每67条指令就会有一个分支必须在多个基本块之间开发指令级的并行性循环级并行

3、:循环体中指令之间的并行性开发循环级并行的基本技术方法指令调度(scheduling)循环展开(loop unrolling)换名(renaming),4.1.1循环展开调度的基本方法,循环展开是展开循环体若干次,将循环级并行转化为指令级并行的技术这个过程既可以通过编译器静态完成,也可以通过硬件动态进行开发循环级并行性的另外一个重要技术是向量处理技术具有向量处理指令的典型机器是向量计算机,有关向量处理和向量计算机的内容本章不作讨论本章中的分支指令就是指条件转移指令,本章通用浮点流水线延迟表,编译器在完成这种指令调度时,受限于以下两个特性一是程序固有的指令级并行性二是流水线功能部件的执行延迟本章

4、中使用的浮点流水线的延迟如下表,流水线其他特性说明,整数流水线采用改进的MIPS整数流水线由于数据的取操作的结果可以毫无停顿的通过相关通路机制传送到数据存部件,所以延迟为0定向通道或旁路机制分支指令,由整数流水线执行分支条件检测调整到ID段如果分支指令使用上一条指令的结果作为分支条件,将要延迟1节拍分支指令有1个节拍的延迟槽浮点运算一般为64位无结构冒险,循环展开实例,对于下面的源代码,在不进行指令调度和进行指令调度两种情况下,分析代码一次循环的执行时间for (i=1; i=1000; i+)xi = xi + s;,编译过程,每一遍循环之间是不存在相关的多遍循环可以同时执行而不会导致结果的

5、错误变量分配寄存器整数寄存器R1用作循环计数器,初值为向量中最高端地址元素的地址浮点寄存器F2用于保存常数S为简单起见,假定最低端元素的地址为8否则需要另外的指令来将它和R1做比较,MIPS汇编语言程序,程序转换成MIPS汇编语言程序Loop:LDF0,0(R1);F0为向量元素ADDDF4,F0,F2;加常数F2SD0(R1),F4;保存结果SUBIR1,R1,#8;修改指针BNEZR1,Loop;循环控制,循环无调度执行,循环无调度执行,循环无调度执行,循环无调度执行,如果分支指令使用上一条指令的结果作为分支条件,将要延迟1节拍,循环无调度执行,循环无调度执行,分支指令有1个节拍的延迟槽,

6、循环无调度执行,循环无调度执行结果分析,每遍循环需要10个时钟节拍只有3个时钟节拍(L.D, ADD.D, S.D)有效比率为30%空转5个时钟节拍 (50%)循环控制2个时钟节拍 (20%)调度代码,减少空转,调度代码,调度代码,调度代码,调度代码,调度代码,如何进行调度,通过一个好的编译器来调度可以调换SUBI和SD的位置将SD指令移到BNEZ的延迟槽内改变SD存取指令访问内存地址的偏移量,调度代码结果分析,每遍循环6个时钟节拍和未调度代码比较,加速比 10/6=1.73个有效时钟节拍 (L.D, ADD.D, S.D)节拍有效比率50%1拍空转 (占17%)2拍循环控制 (占33%)如何

7、进一步减少空转和循环控制占用的比率?,循环展开,如果将循环展开3次得到4个循环体(假设向量包含了4的倍数的元素)Loop:L.DF0,0(R1)ADD.DF4,F0,F2S.D0(R1),F4L.DF6,-8(R1)ADD.DF8,F6,F2S.D-8(R1), F8L.DF10,-16(R1)ADD.DF12,F10,F2S.D-16(R1), F12L.DF14,-24(R1)ADD.DF16,F14,F2S.D-24(R1), F16DADDUI R1,R1,#-32BNER1,R2,Loop,执行时间分析,Loop:L.DF0,0(R1)ADD.DF4,F0,F2S.D0(R1),F4

8、L.DF6,-8(R1)ADD.DF8,F6,F2S.D-8(R1), F8L.DF10,-16(R1)ADD.DF12,F10,F2S.D-16(R1), F12L.DF14,-24(R1)ADD.DF16,F14,F2S.D-24(R1), F16DADDUIR1,R1,#-32BNER1,R2,Loopstall,12,34,5,678,910,11,121314,1516,17,181920,2122,23,242526,2728,结果分析,循环使用28个时钟节拍14个空转节拍每个L.D有1个空转个节拍 共4拍每个ADD.D有2个空转节拍 - 共8拍DADDUI有1个空转节拍 - 共1

9、拍BRANCH有1个空转节拍 - 共1拍有14个指令流出节拍每遍循环7个时钟节拍共计使用9个寄存器,循环展开+指令调度,Loop:L.DF0,0(R1)L.DF6,-8(R1)L.DF10,-16(R1)L.DF14,-24(R1)ADD.DF4,F0,F2ADD.DF8,F6,F2ADD.DF12,F10,F2ADD.DF16,F14,F2S.D0(R1),F4S.D-8(R1),F8DADDUIR1,R1,#-32S.D16(R1),F12BNER1,R2,LoopS.D8(R1),F16,“循环展开+指令调度”结果分析,每遍循环时间下降为14个时钟节拍每个元素平均使用3.5个时钟节拍比较循环展开,没有指令调度每个元素7拍没有循环展开,有指令调度每个元素6拍,循环展开总结,对指令进行移动是有效的展开是有用的用不同的寄存器换名更多的寄存器消除额外的测试开销在循环展开时分析LOAD/STORE指令进行内存地址换名保留真相关,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报