《多指令流出技术》.ppt
25页4.4 多指令流出技术,一个时钟周期内流出多条指令, CPI1 多指令流出处理器有三种基本结构:,超标量(Superscalar) 每个时钟周期流出的指令数不定,它既可 以通过编译器静态调度,也可以通过记分牌或 Tomasulo算法动态调度, 超流水(Super Pipeline) 将每个功能部件进一步流水化,特别是取 指令或指令流出被分解为多个段,使得一个功 能部件在一拍中可以处理多条指令第四章 指令级并行,超长指令字VLIW(Very Long Instruction Word,简记为VLIW) 每个时钟周期流出的指令数是固定的,它 们构成一条长指令,或说是一个混合指令包, 这种处理器目前只能通过编译静态调度4.4 多指令流出技术,采用前面假设的流水线延迟,并且采用相同的代 码,即将1个标量和数组相加: Loop:LDF0,0(R1);F0=数组元素 ADDDF4,F0,F2;加上在F2中的标量 SD0(R1),F4;存结果 SUBIR1,R1,#8 ;将指针减少8(每个DW) BNEZR1,Loop;R1不等于0,转移,4.4 多指令流出技术,4.4.1 静态超标量技术,在典型的超标量处理器中,每个时钟周期可 流出1到8条指令。
流出的指令必须不相关且满足某些限制条件 超标量处理器的指令序列可以采用静态调度 或动态调度 DLX处理器是怎样实现超标量的呢? 假设:每个时钟周期流出两条指令: 取(load)指令、存(store)指 令、分支指令或整数运算操作, 任意的浮点操作4.4 多指令流出技术,1. 要求:,取指令和解码部件都是64位 编译结果要求指令按要求组合成对,且与64位边 界对齐,整数指令顺序在前 只有第一条指令流出后才可以流出第二条指令 如果第二条指令不满足条件就只流出第一条指令2. DLX两路超标量指令流的示意图,4.4 多指令流出技术,指令整数指令浮点指令整数指令浮点指令整数指令浮点指令整数指令浮点指令,IFIF,IDIDIFIF,EXEXIDIDIFIF,MEMMEMEXEXIDIDIFIF,WBWBMEMMEMEXEXIDID,WBWBMEMMEMEXEX,WBWBMEMMEM,WBWB,流水线工作情况,图4.16 两路超标量指令执行示意图,4.4 多指令流出技术,3.通过对指令流出部件采用流水技术,可以很大地 提高指令流出的速率,但同时必须采用流水化的 功能部件或多个独立的功能部件4.并行流出一条整数指令和一条浮点指令,除了一 般的冲突监测机制,只要增加少量的硬件。
5.指令相关情况,浮点数据访存指令将使用整数部件,会增 加访存的结构冲突监测是否存在结构相 关只需检查两条指令的操作码 浮点寄存器端口的访问冲突:,4.4 多指令流出技术,限制浮点数据存取(访存)指令单独执行给每个浮点寄存器设置两个的端口,一个读端口,一条写端口,通过增加资源来消除结构相关当指令组合中包含浮点取指令,且后面的浮点指令 与之相关时,硬件必须能够检测出来,从而限制后 面浮点指令的流出除了这种情况,其它可能存在 的相关检测和单流出流水线是相同的另外,还需 要添加一些额外的相关专用通路来避免不必要的流 水线空转 限制超标量流水线的性能发挥的障碍:,4.4 多指令流出技术,取操作指令的结果不能在本周期或下一个周期使用,所以后续三条指令不能使用其结果分支延迟也变为三条指令,因为分支指令肯定是指令组合的第一条指令例4.9 下面是前面我们使用的循环程序段,在超标 量DLX流水线上将如何调度? Loop: LD F0,0(R1) ;F0=数组元素 ADDDF4,F0,F2 ;加上在F2中的标量 SD0(R1),F4 ;存结果 SUBIR1,R1,#8 ;将指针减少8(每个DW) BNEZR1,Loop ;R1不等于0,转移,4.4 多指令流出技术,解:展开并经过调度的指令序列如图4.17所示。
Loop:,LDLDLDLDLDSDSDSDSDSUBIBNEZSD,F0(R1)F6,-8(R1)F10,-16(R1)F14,-24(R1)F18,-32(R1)0(R1),F4-8(R1),F8-16(R1),F12-24(R1),F16 R1,R1,#40R1,Loop8(R1),F20,ADDDADDDADDDADDDADDD,F4,F0,F2F8,F6,F2F12,F10,F2F16,F14,F2F20,F18,F2,123456789101112,整数指令 浮点指令 时钟周期,超标量流水线上展开的代码每次循环需12个时钟周期,即每个迭代是2.4个时钟周期而在普通的DLX流水线上,没有调度的迭代1次为9个时钟周期,性能提高了3.75倍;调度后为6个时钟周期,性能提高了2.5倍;展开4次并调度后每个迭代为3.5个时钟周期,性能提高了1.4倍4.4 多指令流出技术,6.超标量处理器与超长指令字处理器相比有两个 优点: (1)超标量结构对程序员是透明的,因为处理 器能自己检测下一条指令能否流出,从而 不需要排列指令来满足指令流出; (2)即使是没有经过编译器对超标量结构进行 调度优化的代码或是旧的编译器生成的代 码也可以运行,当然运行的效果不会很好。
要想达到很好的效果,方法之一: 使用动态超标量调度技术4.4 多指令流出技术,4.4.2 动态多指令流出技术,扩展Tomasulo算法:支持两路超标量 即每个时钟周期流出两条指令 (一条是整数指令,另一条是浮点指令) 1.要求,指令按顺序流向保留站,否则信息记录机制 会太复杂 将整数寄存器和浮点寄存器分开,只要不使 用相同的寄存器就可同时将一条整数指令和 一条浮点指令送到它们的保留站中去 限制相关指令的并行执行4.4 多指令流出技术,2.有两种方式可以实现两路超标量 (1) 将指令流出段进一步流水化,使指令流出的 速度是基本机器周期的两倍 (2) 对流出的指令组合进行限制.只有浮点的取 操作指令或是从整数寄存器将数据送入浮点寄 存器的传送操作,才会产生相关而导致两条指 令不能同时执行如果对流出的指令组合限制 减少,指令组合的复杂度增加,可能出现的相 关情况会更多,对硬件相关检测的要求就会大 提高4.4 多指令流出技术,3.使用结果队列可以减少存储器取操作或数据传送操作对保留站的需求量,可以使等待操作数的存操作指令提早流出4.动态调度对数据传送是最有效的,而静态调度对寄存器-寄存器操作的代码序列最有效。
通过队列实现存储器操作和数据传送操作,而脱离对其他功能部件的保留站依赖的结构,称为解耦(decoupled,也可称为退耦)结构4.4 多指令流出技术,例4.10 下面的代码运行于采用Tomasulo算法的两路动态超标量DLX流水线上现做以下假设:(1)无论是否相关,每个时钟周期能流出一条整 数指令和一条浮点指令;(2)有1个整数部件,用于整数运算和地址计算; 有1个独立的浮点功能部件;(3)指令流出和写结果各占用1个时钟周期;(4)有1个具有独立分支预测能力的分支预测部件, 分支指令只能单独流出,没有分支延迟;(5)因为写结果占用1个周期,所以产生结果的延 迟为:整数运算1个周期,存储器取数操作2 个周期,浮点运算3个周期;,4.4 多指令流出技术,列表表示出循环前面三遍循环各个指令的流出、开始执行、访存和将结果写到CDB的时间需要分析的源代码为: Loop:LDF0,0(R1);F0=数组元素 ADDDF4,F0,F2;加上在F2中的标量 SD0(R1),F4;存结果 SUBIR1,R1,#8 ;将指针减少8(每个DW) BNEZR1,Loop;R1不等于0,转移,解 运行结果如图4.18所示。
4.4 多指令流出技术,111112222233333,LDADDDSDSUBIBNEZLDADDDSDSUBIBNEZLDADDDSDSUBIBNEZ,F0,0(R1)F4,F0,F20(R1), F4R1,R1,#8R1,LoopF0,0(R1)F4,F0,F20(R1), F4R1,R1,#8R1,LoopF0,0(R1)F4,F0,F20(R1), F4R1,R1,#8R1,Loop,流出112234455677889,执行2534671089111215131416,访存398141319,写CDB48591310141815,说明流出第一条指令等待LD的结果等待ADDD的结果等待SD计算0(R1)的ALU等待SUBI的结果等待BNEZ流出和结果等待LD的结果0(R1)等待ALU,等待ADDD的结果等待ALU等待SUBI的结果等待BNEZ流出和结果等待LD的结果0(R1)等待ALU,等待ADDD的结果等待ALU等待SUBI的结果,遍数 指 令,从图中可以看出: 程序基本可以达到3拍流出5条指令, IPC=5/3=1.67条/拍 虽然指令的流出率比较高,但是执行效率并不是很高,16拍共执行15条指令,平均指令执行速度为15/16=0.94条/拍。
4.4 多指令流出技术,4.4.3 超长指令字技术,采用多个独立的功能部件,将多条指令的操作 组装成固定格式的指令包,形成一条非常长的 指令 超长指令字的格式固定,处理过程简单,采用 超长指令字的处理器所需硬件量比超标量要少 下面讨论流出通道较宽的超长指令字处理器4.4 多指令流出技术,1.超长指令字处理器的指令包括: 两个整数操作、两个浮点操作、两个访存操作和一个分支操作, 每个操作可能占用16到24位,从而指令长度达到112到168位2.指令中每一个操作字段称为操作槽3.超长指令字处理器中功能部件的数量和指令中包含的操作数量是对应的4.假设有一种技术可以产生满足超长指令字要求的代码段,这个代码段用来构建超长指令字 5.下面看一个最基本的超长指令字处理器的操作过程4.4 多指令流出技术,例4.11 假设超长指令字每个时钟周期可同时流出两 条访存指令、两条浮点指令和一条整数指令 或分支指令给出在此处理器上数组元素循 环加一个标量的展开后的代码序列尽可能 展开循环以消除空操作,忽略分支指令的延 迟槽 解 代码序列入图4.19所示,展开5遍循环可以 消除空操作4.4 多指令流出技术,LDLDLDSDSDSD,F0,0(R1)F10,-16(R1)F18,-32(R1)0(R1),F4-16(R1),F128(R1),F20,LDLDSDSD,F6,-8(R1)F14,-24(R1)-8(R1),F824(R1),F16,ADDDADDDADDD,F4,F0,F2F12,F10,F2F20,F18,F2,ADDDADDD,F8,F6,F2F16,F14,F2,SUBIBNEZ,R1,R1,#40R1,Loop,访存指令1 访存指令2 浮点指令1 浮点指令2 整数/转移指令,这段程序的运行时间为8个时钟周期,每遍循环平均1.6个时钟周期。
8个时钟周期内流出了17条指令,每个时钟周期2.1条8个时钟周期共有操作槽85=40个,有效槽的比例为42.5% 功能部件使用效率不高是超长指令字的不足之一4.4.4 多流出处理器受到的限制,1.处理器中指令流出能力是有限的,它主要受 以下方面的影响: (1) 程序内在的指令级并行性; (最简单、最根本的因素) 所需要的无关指令数等于流水线的深度 乘以可以同时工作的功能部件数 (2) 硬件实现的困难; 多指令流出的处理器需要大量的硬件资源 (3) 超标量和超长指令字处理器固有的技术限制4.4 多指令流出技术,2. 设计多流出处理器的主要难点:,访存的开销 硬件的复杂性 编译器技术的难度,4.4 多指令流出技术,。





