计算机系统结构第6章.ppt
《计算机系统结构第6章.ppt》由会员分享,可在线阅读,更多相关《计算机系统结构第6章.ppt(89页珍藏版)》请在三一办公上搜索。
1、第6章 指令级并行的开发软件方法,6.1 基本指令调度及循环展开6.2 跨越基本块的静态指令调度6.3 静态多指令流出:VLIW技术6.4 显式并行指令计算EPIC6.5 开发更多的指令级并行6.6 实例:IA-64体系结构,指令调度:找出不相关的指令序列,让它们在流水线上重叠并行执行。制约编译器指令调度的因素程序固有的指令级并行流水线功能部件的延迟,6.1 基本指令调度及循环展开,6.1.1 指令调度的基本方法,表6.1本节使用的浮点流水线的延迟,6.1 基本指令调度及循环展开,例6.1 对于下面的源代码,转换成MIPS汇编语言,在不进行指令调度和进行指令调度两种情况下,分析其代码一次循环所
2、需的执行时间。for(i=1000;i0;i-)xi=xi+s;解:先把该程序翻译成MIPS汇编语言代码 Loop:L.D F0,0(R1)ADD.D F4,F0,F2 S.D F4,0(R1)DADDIU R1,R1,#-8 BNE R1,R2,Loop,6.1 基本指令调度及循环展开,在不进行指令调度的情况下,根据表中给出的浮点流水线中指令执行的延迟,程序的实际执行情况如下:指令流出时钟Loop:L.D F0,0(R1)1(空转)2ADD.D F4,F0,F23(空转)4(空转)5S.D F4,0(R1)6DADDIU R1,R1,#-87(空转)8BNE R1,R2,Loop9(空转)1
3、0,6.1 基本指令调度及循环展开,在用编译器对上述程序进行指令调度以后,程序的执行情况如下:指令流出时钟Loop:L.D F0,0(R1)1DADDIU R1,R1,#-8 2ADD.D F4,F0,F23(空转)4BNE R1,R2,Loop 5S.D F4,8(R1)6,6.1 基本指令调度及循环展开,进一步分析:编译时指令调度是怎样减少整个指令序列在流水线上的执行时间的?指令调度能否跨越分支边界?怎样提高整个执行过程中有效操作的比率?,循环展开把循环体的代码复制多次并按顺序排放,然后相应调整循环的结束条件。开发循环级并行的有效方法 例6.2 将例6.1中的循环展开3次得到4个循环体,然
4、后对展开后的指令序列在不调度和调度两种情况下,分析代码的性能。假定R1的初值为32的倍数,即循环次数为4的倍数。消除冗余的指令,并且不要重复使用寄存器。,6.1.2 循环展开,6.1 基本指令调度及循环展开,展开后没有调度的代码如下(需要分配寄存器),指令流出时钟Loop:L.DF0,0(R1)1(空转)2ADD.DF4,F0,F23(空转)4(空转)5S.DF4,0(R1)6L.DF6,-8(R1)7(空转)8ADD.DF8,F6,F29(空转)10(空转)11S.DF8,-8(R1)12L.DF10,-16(R1)13(空转)14,指令流出时钟ADD.DF12,F10,F215(空转)16
5、(空转)17S.DF12,-16(R1)18L.DF14,-24(R1)19(空转)20ADD.DF16,F14,F221(空转)22(空转)23S.DF16,-24(R1)24DADDIUR1,R1,#-3225(空转)26BNER1,R2,Loop27(空转)28,50%是空转周期!,调度后的代码如下:,指令流出时钟Loop:L.DF0,0(R1)1L.DF6,-8(R1)2L.DF10,-16(R1)3L.DF14,-24(R1)4ADD.DF4,F0,F25ADD.DF8,F6,F26ADD.DF12,F10,F27ADD.DF16,F14,F28S.DF4,0(R1)9S.DF8,-
6、8(R1)10DADDIUR1,R1,#-3212S.DF12,16(R1)11BNER1,R2,Loop13S.DF16,8(R1)14,没有空转周期!,结论:通过循环展开、寄存器重命名和指令调度,可以有效开发出指令级并行。,6.1 基本指令调度及循环展开,循环展开和指令调度的注意事项 保证正确性注意有效性使用不同的寄存器删除多余的测试指令和分支指令,并对循环结束代码和新的循环体代码进行相应的修正。注意对存储器数据的相关性分析注意新的相关性,概述目标:在保持原有数据相关和控制相关不变的前提下,尽可能地缩短包含分支结构的代码段的总执行时间。单流出处理器减少指令数多流出处理器缩短关键路径长度基本
7、思想:在循环体内的多个基本块间移动指令,扩大那些执行频率较高的基本块的体积。,6.2 跨越基本块的静态指令调度,6.2.1 全局指令调度,6.2 跨越基本块的静态指令调度,实例分析由于分支条件为true(转移)的概率大,全局指令调度时会将语句1、2、3、5合并为一个更大的基本块。,一个分支结构的代码段,如何保证分支条件为false时结果依然正确?如何将语句3和5调度到语句2之前?,6.2 跨越基本块的静态指令调度,将上图中的代码转换为下面的MIPS汇编指令,LDR4,0(R1)/取ALDR5,0(R2)/取BDADDUR4,R4,R5/A=A+BSD0(R1),R4/存ABNEZR4,else
8、part/A=0则转移X/代码段X,基本块elsepartJjointhenpart:/基本块thenpartSD,0(R2)/指令I1,对应语句3join:SD,0(R3)/指令I2,对应语句5,6.2 跨越基本块的静态指令调度,调度指令I1直接将I1移到BEQZ前是否会产生错误结果?向基本块elsepart中增加补偿代码补偿代码有可能带来额外时间开销调度指令I2将I2移动到基本块thenpart中,同时复制到elsepart中。若不影响执行结果,将I2调度到BEQZ前,同时删除elsepart中的副本。,6.2 跨越基本块的静态指令调度,全局指令调度是一个很复杂的问题 以I1的调度为例:需
9、要确定分支中基本块thenpart和elsepart的执行频率各是多少?在分支语句前完成I1所需的开销是多大?调度I1是否能够缩短thenpart块的执行时间?I1是否是最佳的被调度对象?是否需要向elsepart块中增加补偿代码,补偿代码开销如何?怎样生成补偿代码?,概述踪迹(trace):程序执行的指令序列,通常由一个或多个基本块组成,trace内可以有分支,但一定不能包含循环。踪迹调度(trace scheduling)会优化执行频率高的trace,减少其执行开销。由于需要添加补偿代码以确保正确性,那些执行频率较低的trace的开销反而会有所增加。踪迹调度非常适合多流出处理器。,6.2.
10、2 踪迹调度,6.2 跨越基本块的静态指令调度,踪迹调度的步骤分为两步:踪迹选择和踪迹压缩踪迹选择从程序的控制流图中选择执行频率较高的路径,每条路径就是一条trace。处理转移成功与失败概率相差较大的情况循环结构:循环展开分支结构:根据典型输入集下的运行统计信息,6.2 跨越基本块的静态指令调度,踪迹选择实例分析,6.2 跨越基本块的静态指令调度,将左边的循环展开4次并把阴影部分(执行频率高)拼接在一起就可以得到一条trace;一条trace可以有多个入口和多个出口。,踪迹压缩对已生成的trace进行指令调度和优化,尽可能地缩短其执行时间;跨越trace内部的入口或出口调度指令时必须非常小心,
11、有时还需要增加补偿代码。,6.2 跨越基本块的静态指令调度,三条trace:B1-B3、B4以及B5-B7指令“y=x-y”被从B1调度到B3中,跨越了trace的一个出口;需要向块B2中增加补偿代码,即将指令“y=x-y”复制到B2的第一条指令之前。,踪迹调度的性能特点踪迹调度能够提升性能的最根本原因在于选出的trace都是执行频率很高的路径,减少它们的执行开销有助于缩短程序的总执行时间。对于某些应用,补偿代码引起的开销很有可能降低踪迹调度的优化效果。踪迹调度会大大增加编译器的实现复杂度。,6.2 跨越基本块的静态指令调度,概述在踪迹调度中,如果trace入口或出口位于trace内部,编译器
12、生成补偿代码的难度将大大增加,而且编译器很难评估这些补偿代码究竟会带来多少性能损失。超块(superblock)是只能拥有一个入口,但可以拥有多个出口的结构超块的构造过程与trace相似,但怎样确保只有一个入口?,6.2.3 超块调度,6.2 跨越基本块的静态指令调度,超块构造尾复制技术,6.2 跨越基本块的静态指令调度,将左边的循环展开4次并把阴影部分(执行频率高)拼接在一起就可以得到一个超块;超块有1个入口和5个出口(n=4/3/2/1/0)。除了n=0外,从其他4个出口退出超块后,还需要继续完成余下的n次叠代(黄色部分)。,超块调度的性能特点尾复制技术简化了补偿代码的生成过程,并降低了指
13、令调度的复杂度。超块结构目标代码的体积也大大增加。补偿代码的生成使得编译过程更加复杂,而且由于无法准确评估由补偿代码引起的时间开销,这限制方法超块调度的应用范围。,6.2 跨越基本块的静态指令调度,VLIW vs.超标量在动态调度的超标量处理器中,相关检测和指令调度基本都由硬件完成。在静态调度的超标量处理器中,部分相关检测和指令调度工作交由编译器完成。在VLIW处理器中,相关检测和指令调度工作全部由编译器完成,它需要更“智能”的编译器。,6.3 静态多指令流出:VLIW技术,实例分析,6.3 静态多指令流出VLIW技术,例6.3 假设某VLIW处理器每个时钟周期可以同时流出5个操作,包括2个访
14、存操作,2个浮点操作以及1个整数或分支操作。将例6.1中的代码循环展开,并调度到该VLIW处理器上执行。循环展开次数不定,但至少要能够保证消除所有流水线“空转”周期,同时不考虑分支延迟。,解:循环被展开7次,经调度后可以消除所有流水线“空转”。在不考虑分支延迟的情况下,每执行一个叠代需要9个时钟周期,计算出7个结果,即平均每得到一个结果需要1.29个周期。VLIW的不足:编码效率仅比50%略高一些所需要的寄存器数量也大大增加,6.3 静态多指令流出VLIW技术,VLIW性能分析VLIW目标代码编码效率低 为消除流水线“空转”需要增加循环展开的次数 很难从应用程序中找到足够多的并行指令填满VLI
15、W指 令中的每一个slot VLIW流水线的互锁机制 VLIW处理器中没有实现任何相关检测逻辑,而是靠互 锁机制保证执行结果的正确 这种简单的互锁机制将造成较大的开销目标代码兼容性差 二进制翻译,6.3 静态多指令流出VLIW技术,性能比较多流出处理器 vs.向量处理器即使对于一些结构不规则的代码,多流出处理器也能从中挖掘出一些指令级并行。多流出处理器对存储系统没有过高的要求,价格较便宜、由Cache和主存构成的多层次存储子系统即可满足其对性能的要求。,6.3 静态多指令流出VLIW技术,结论:多流出处理器已成为当前实现指令级并行的主要选择,而向量处理器则通常是作为协处理器集成到计算机系统中,
16、以加速特定类型的应用程序。,超标量和VLIW结构都存在严重不足 超标量硬件复杂度太高,8流出成为极限;VLIW存在代码兼容问题,编译器智能程度不够。EPIC技术在VLIW基础上融合了超标量的一些优点 编译器通过踪迹调度、超块调度等带有极强猜测性的优化 技术尽可能多地挖掘指令级并行。流水线硬件则提供丰富的计算资源实现这些指令级并行,并通过专门的机制确保在程序执行过程中出现预测错误时 仍然能得到正确的运行结果,尽量减少由此引起的额外开 销。,6.4 显示并行指令计算EPIC,什么是EPIC?指令级并行主要由编译器负责开发,处理器为保证代码正 确执行提供必要的硬件支持,只有在这些硬件机制的辅助 下这
17、些优化技术才能高效完成。系统结构必须提供某种通信机制,使得流水线硬件能够了 解编译器“安排”好的指令执行顺序。EPIC编译器的高级优化技术 非绑定分支 谓词执行 前瞻执行,6.4 显示并行指令计算EPIC,分支指令在传统流水线上的执行过程计算分支转移条件生成分支目标地址取下一条指令译码并流出下一条指令,6.4.1 非绑定分支,6.4 显示并行指令计算EPIC,在传统流水线上,分支指令都具有“原子性”,即上述各操作被绑定在一起,不能分开。,非绑定分支技术核心思想:将分支指令划分为多条粒度更小的指令,独立执行。准备操作:计算分支目标地址 比较操作:计算分支转移条件 转移操作:根据分支转移条件是tr
18、ue还是false,改变控 制流或执行顺序的下一条指令。运行时,流水线硬件根据前两个操作的结果,动态地将第三个操作转换为空操作或无条件转移。前两个操作应尽早完成,6.4 显示并行指令计算EPIC,条件执行机制条件执行:指指令的执行依赖于一定的条件,当条件为真时指令将正常执行,否则将什么也不做。实例:条件传输指令例6.4 在下面的语句中,if(A=0)S=T;假设变量A、S、T的值分别保存在寄存器R1、R2和R3内。请用分支指令和条件传输指令编写功能相同的汇编代码。,6.4.2 谓词执行,6.4 显示并行指令计算EPIC,解:包含分支指令的MIPS汇编代码如下:BNEZ R1,LADDU R2,
19、R3,R0L:而使用条件传输指令CMOVZ时的汇编代码为:CMOVZ R2,R3,R1 指令CMOVZ有3个操作数,R2为目的操作数,R1和R3是源操作数,执行条件保存在寄存器R1中。当R1=0时,R3的值被复制到R2中,否则R2的内容不变。,6.4 显示并行指令计算EPIC,分析条件传输指令将分支指令引起的控制相关转换为相对于分支转移条件(R1)的数据相关。条件执行机制能够删除代码中那些行为难以预测的分支指令,提高分支预测准确率,并减少由于分支预测错误带来的性能损失。无论指令的执行条件是否为真,指令都将被读出、译码并执行。这种编译优化技术叫做条件转换。,6.4 显示并行指令计算EPIC,条件
20、传输指令的应用计算绝对值求绝对值的运算A=abs(B),对应的C语句为:if(B0)A=-B;else A=B;使用条件传输指令后,代码段如下(假设变量A和B分别被保存在寄存器R1和R2中):SUB R1,R0,R2/A=-BSLT R3,R2,R0/若B0,R3=1,/否则R3=0CMOVZ R1,R2,R3/R3=0时,A=B,6.4 显示并行指令计算EPIC,谓词执行机制条件传输指令的性能问题随着指令数的增加,经过条件转换得到的条件传输指令和条件计算指令的数量也将增加,这会大大降低目标代码的效率。谓词执行(predicated execution)给指令集中的每条指令都增加一个执行条件,
21、这个执行条件就叫做谓词(predicate)。若谓词为真,指令正常执行,否则什么也不做。,6.4 显示并行指令计算EPIC,谓词执行机制实例分析,6.4 显示并行指令计算EPIC,例6.5 假设在一个周期内,某双流出的超标量处理器可以同时执行一个访存操作和一个ALU操作,或者仅执行一个分支操作。受此限制,下面这段汇编代码的执行效率并不高,表现在:(1)第二个周期只能流出一条ALU指令,访存单元空闲;(2)当分支转移不成功时,BEQZ指令后的两条LW指令之间存在的数据相关将引起流水线暂停。试通过谓词执行机制解决这两个问题,减少此段代码的执行开销。,例6.5的代码段,6.4 显示并行指令计算EPI
22、C,解 我们用LWC表示带谓词的LW指令,并假设该指令的执行条件为谓词不等于0。这样,BEQZ后的第一条LW指令就可以被转换为LWC指令,并被调度到第二个周期执行,如下所示:,6.4 显示并行指令计算EPIC,分析调度后代码的执行时间缩短了。若分支转移成功,LWC将被转换为空操作,这不影响结果的正确性,但也不会缩短执行时间。周期4中的LW指令转换为LWC,结果如何?,6.4 显示并行指令计算EPIC,谓词执行机制异常处理谓词执行增加了异常处理的复杂度例若LWC指令执行时发生缺页中断,如何处理?LWC的谓词为true,中断本应发生;LWC的谓词为false,中断不应发生。,6.4 显示并行指令计
23、算EPIC,如何将谓词为假的指令转换为空操作?两种方法 流水线前端指令流出时 流水线后端结果确认时一般采用第二种方法 为什么?,6.4 显示并行指令计算EPIC,概述谓词执行与全局指令调度的不足之处 仅有少量结构全面实现谓词执行 全局指令调度往往需要补偿代码EPIC通过前瞻执行提高猜测执行的效果什么是前瞻执行?在数据相关或控制相关尚未消除时,将指令调度到相关 指令前猜测执行。通过硬件机制完成异常处理,确保正确性。,6.4.3 前瞻执行,6.4 显示并行指令计算EPIC,影响前瞻执行效果的因素 编译器能力的高低:能否准确识别可以被前瞻执行的指令。异常处理机制:能否推迟处理由被前瞻执行的指令引起的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机系统 结构
链接地址:https://www.31ppt.com/p-6606625.html