《浙江工商大学计算机体系结构第2章指令级并行及其开发.ppt》由会员分享,可在线阅读,更多相关《浙江工商大学计算机体系结构第2章指令级并行及其开发.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章 指令级并行及其开发o指令级并行概念o支持指令级并行的基本编译技术 o预测技术o动态调度o基于硬件的推测o多发射技术o指令传送和推测高级技术 2.1 指令级并行概念o指令级并行(ILP,instruction-level parallelism)产生于80年代中期,处理器采用流水线方式使指令的执行可以重叠进行,可以将指令间的关系看做是并行的,指令间潜在的重叠称为 指令级并行方法分为两类:一种依赖于硬件,动态地发现和开发指令级并行;另一种依赖于软件技术,在编译阶段静态地发现并行。前一种占主导地位,后一种局限于科学或特定领域。2.1 指令级并行概念o循环级并行 为了提高指令级并行,最常用的方
2、法是将一个循环中的各次迭代并行执行,通常将这类并行称为循环级并行。在循环中,每个迭代可以与其他任何一次迭代重叠执行,在每次迭代内部没有重叠。2.1 指令级并行概念o数据相关和冒险 要判断一段程序蕴含多少并行度,判断指令的相关性是一个关键问题,特别是在开发指令级并行时必须明确哪些指令是可以并行执行的。两条指令是并行的是指流水线有充足资源的情况下,这两条指令可以在任意深度的流水线上并行执行而不会产生停顿。两条指令是相关的,是指它们只能以顺序的方式执行,尽管它们之间只存在部分重叠。2.1 指令级并行概念o数据相关 相关有三种不同的类型:数据相关、名字相关和控制相关 数据相关数据相关,也称为真数据相关
3、,比如有两条指令j和i,指令j可能会引用指令i的结果或指令j数据相关于指令K,而指令k数据相关于指令i,则称指令j数据相关于指令i2.1 指令级并行概念o数据相关 数据相关的两条指令是不能同时执行或完全重叠的,相关意味着在两条指令之间可能可能存在一条由一个或多个数据冒险组成的相关链(见附录A);同时执行数据相关的指令会使内部互锁流水线的处理器检测到冒险,造成停顿,从而减小甚至消除指令间的重叠度 数据相关传递三方面的信息:1)数据相关表明存在冒险的可能,2)数据相关决定了必须遵循的执行顺序,3)数据相关决定了可以达到并行度的上限2.1 指令级并行概念o名字相关 名字相关发生在使用相同存储器或存储
4、单元(称为名字)的两条指令之间,但名字相关的指令间不存在数据流,名字相关有两种类型(假设指令i位于指令j之前):1、反相关 指令 i 读一个寄存器或存储单元,而指令j写该寄存器或存储单元,必须保护原始的指令执行顺序。2、输出相关 指令i和指令j写相同的寄存器时,为了保证该寄存器的值最后是由指令j写入的,必须保护指令的执行顺序。2.1 指令级并行概念o控制相关 控制相关决定了于转移指令有关的指令的执行顺序,从而使与转移有关的指令只在应当被执行时按程序顺序执行,最简单的控制相关例子:if p1 S1;if p2 S2;2.1 指令级并行概念o控制相关 控制相关会带来两类限制:1、与某一转移相关的指
5、令不能被移动到该转移之前,这样的移动会使指令的执行不再受控于该转移,比如不能将if语句的then 部分中的指令移动到if语句之前 2、与某一转移相关的指令不能被移动到该转移之后,这样的移动会使指令的执行受到该转移的控制,不能将if语句之前的指令移动到受控于该if语句的then 部分中 2.1 指令级并行概念o数据冒险 依据指令读写顺序,数据冒险可以分为三类,写后读、写后写、读后写。写后读()J试图在i写一个数据之前读取它,这时j将错误地读出旧值,是最常见的冒险类型,它对应于真实的数据相关 写后写(WAW)J试图在i写一个数据之前写该数据,这时,如果执行顺序错误,那么当写操作结束时,留下的值将是
6、i写的结果,而程序的本意是留下j写的值2.1 指令级并行概念o数据冒险 读后写(WA R)J试图在i读一个数据之前写该数据,这时,i将错误地读出新值,这类冒险是由反相关引起的。WA R不会发生在静态流水线中,因为在静态流水线中,所以的读操作发生的早,写操作发生的晚(见附录A)。只有在指令流水过程中一些指令的写操作提前完成、或者其他指令的读操作滞后完成、或者指令顺序被改变的情况下,才会发生WA R冒险 读后读(RAR)不产生冒险2.2 支持指令级并行的基本编译技术o基本流水线调度 为了避免流水线停顿,要去发现可以流水重叠的不相关的指令序列,将指令代码中相关的指令加以分离,使其相隔的时钟周期能正好
7、等于原来指令在流水执行时的时延。编译器进行这类调度的能力既依赖于程序的指令级并行度,也依赖于流水线中功能单元的时延。2.2 支持指令级并行的基本编译技术o循环展开 循环展开可以增加有效操作对转移和开销指令的比重,展开可以通过多次复制循环体和调整循环中止代码来实现。循环展开也可以用来改进调度的效果,由于它消除了转移,因此来自不同迭代的指令可以被一起调度,可以在迭代内加入不相关的指令来消除数据相关引起的停顿。2.2 支持指令级并行的基本编译技术o循环展开和调度小结 1、如果迭代之间是互不相关的,则可以判定循环展开是有意义的;2、为不同的计算使用相同的寄存器会引起额外的限制,需要使用不同的寄存器来避
8、免这类限制;3、消除额外的测试和转移指令,调整循环终止和迭代代码;4、如果来自不同循环体的load和store是互不相关的,则可以在循环展开中将两者交换 5、调度代码,保持相关性,确保与原始代码结果相同 2.2 支持指令级并行的基本编译技术o循环展开和调度小结 循环展开的效果受制于三因素:展开使额外开销降低、代码量的大小和编译器的限制。循环展开次数越多,则额外开销的时钟周期越小;代码量的增长,特别是在规模较大的循环中,当代码量的增长使指令Cache的缺失率增加时,这类问题就更加明显;如果将展开和大规模调度相结合,寄存器不足是一个亟待解决的问题,特别是在多发射处理器中,由于要重叠执行更多的独立指
9、令序列,寄存器不足带来的挑战更为严峻循环展开对简单流水线、超标量多发射结构、VLIW均适用2.3 采用预测技术减小转移开销o可以通过转移预测技术来减小转移引起的性能损耗,转移预测既可以在编译阶段静态完成,也可以由硬件在执行阶段动态完成,有些处理器,转移行为在编译阶段是高度可预测的,静态转移预测既可以应用于此类处理器,也可以用来辅助动态转移预测2.3 采用预测技术减小转移开销o静态转移预测 为了重组转移周围的代码以获得更高的性能,需要在程序编译阶段静态预测转移行为,最简单的方法是预测转移总是被选中,这种方法的错误率等于转移不被选中的比率;另一种技术是通过分析转移的历史表现来进行转移预测,这种技术
10、拥有更高的准确率,它的依据在于转移的表现通常遵循双峰分布,图2.3表明通过这种策略进行转移预测是成功的。2.3 采用预测技术减小转移开销o动态转移预测 动态预测最简单的方法是转移预测缓存,它是一小块由转移指令低位地址索引的存储单元,用来记录转移指令在最近的一次执行中是否被选中,这种方法是缓存中最简单的一种,没有标志位,而且只有当转移延迟高于计算目标所花的时间时才起作用。2.3 采用预测技术减小转移开销o动态转移预测 1bit预测在性能上有不足之处,假设一个转移几乎总是被选中,而当他偶尔未被选中时,错误预测会使预测位空翻,从而使预测错误两次而不是一次。通常使用2bit预测法来弥补这个缺陷,在这种
11、预测法中,仅当错误两次时才改变预测方向,图2.4为2bit预测法的有限状态机。2.3 采用预测技术减小转移开销o动态转移预测 转移预测缓存可以作为一个在IF流水阶段通过指令地址访问的专用Cache来实现,也可以附属于指令Cache中的每一块随指令一起读取。如果经过译码后发现指令为转移指令,并且预测转移将被选中,则应立刻从预测方向上开始取指令,否则继续按顺序取指令和执行,如图2.4所示,预测错误时改变预测位。n bit 计数器当计数器值大于或等于2n-1的一半时,预测转移被选中,反之不被选中。2.3 采用预测技术减小转移开销oTournament预测器 又称整体局部自适应预测器,为了解决标准2b
12、it预测只考虑局部信息而引起的在一些重要转移上预测失败的问题而产生的,该预测器使用多个预测器,一个基于全局信息,另一个基于局部信息,通过一个选择器将二者结合。Tournament预测器以中等大小(8K-32K)的预测位获得更高的准确率,同时可以有效地利用大量预测位。2.4 采用动态调度克服数据冒险o动态调度 动态调度是通过硬件对指令执行顺序进行重组,在保持数据流和异常行为的同时减少停顿。动态调度优势:可以处理一些在编译阶段无法预见的相关情况,如存储器引用等,同时它简化了编译器的设计。更重要的是,它可以在等待时执行一些其他的代码,允许在别的流水线机器上编译的指令在不同的流水线上有效地运行,但动态
13、调度会使硬件复杂度显著增加。2.4 采用动态调度克服数据冒险o动态调度 动态调度虽然不能改变数据流,但它会在相关性出现时尽力避免停顿,而由编译器执行的静态流水线调度则是将相关指令分离,使它们不再引起冒险,从而将停顿减至最小。简单流水线技术的主要限制是按序发射和执行指令,指令以程序顺序发射,一旦指令在流水线中停顿,后续指令就无法再执行,比如当指令i的执行时间很长,则在指令i完成、指令j可以执行之前,指令j之后的指令都必须暂停。2.4 采用动态调度克服数据冒险o动态调度 乱序执行:指令的发射仍采用按序的方式,但指令在它的操作数可用时马上开始执行,流水线采用乱序执行使得指令的结束也是乱序的,乱序执行
14、会产生WAR和WAW冒险。指令的乱序完成会使异常处理变得复杂,异常行为必须保护,以确保除严格按照程序顺序执行时出现的异常之外,不会出现新的异常。即使异常行为被保护,动态调度也会产生一些不精确的异常。2.4 采用动态调度克服数据冒险o动态调度 不精确异常:是指当产生异常时,处理器的状态与严格按照程序顺序执行时的处理器状态不同,不精确异常的发生有下面两种可能:1、异常指令执行之前,流水线提前完成了后面的指令 2、异常指令完成之前,流水线还没有完成前面的指令2.4 采用动态调度克服数据冒险o动态调度 为了实现乱序执行,需要将五级流水线的ID流水阶段分割为以下两个部分:1、发射 译码指令,检测结构冒险
15、 2、读操作数 等到不存在数据冒险时读操作数 在动态调度流水线中,所有的指令在发射阶段都是按序发射,但在读操作数阶段,则可能产生停顿,即进入乱序执行。重点讨论Tomasulo算法2.4 采用动态调度克服数据冒险o用Tomasulo方法进行动态调度 算法由Robert Tomasulo 提出,通过对操作数何时可用进行跟踪以减少RAW冒险,通过引入寄存器重命名减少WAW和WAR冒险。该方法的改进版本的共同特点是通过跟踪指令的相关性使指令在操作数可用时立即开始执行,通过寄存器重命名减少数据冒险。寄存器重命名寄存器重命名是指通过重命名所有的目标寄存器,包括指令序列中位置靠前的指令将要读和写的寄存器。2
16、.4 采用动态调度克服数据冒险o保留站保留站:在Tomasulo算法中,寄存器重命名是通过保留站实现的,保留站为等待发射的指令保存操作数。基本思想是:1、当操作数可用时,保留站马上取操作数并将其缓存,从而避免从寄存器中读操作数避免从寄存器中读操作数;2、即将执行的指令指定保留站为其提供数据输入指定保留站为其提供数据输入;3、当对寄存器的后续写操作在执行过程中发生重叠时,只允许最后一个实际更新寄存器。在指令被发射后,它所需要的操作数所对应的寄存器被寄存器被重命名为保留站的名字重命名为保留站的名字 2.4 采用动态调度克服数据冒险o保留站保留站 保留站与寄存器堆相比有两个重要特点,首先,冒险检测和
17、执行控制是分布的,一个单元中的指令何时可以开始执行是由该单元保留站所掌保留站所掌握的信息决定的握的信息决定的;其次,结果将从缓存它们的保留站中直接传送给功能单元保留站中直接传送给功能单元,而不是通过寄存器传送,这是通过一条公共结果总线/公共数公共数据总线据总线实现的,它使得等待操作数的所有单元可以同时取到操作数。2.4 采用动态调度克服数据冒险oTomasulo算法处理器结构 该处理器基本结构见图2.9,包括浮点单元和load-store单元。每个保留站保存一条已经被发射并等待执行的指令,如果指令所需要的操作数已经被计算出来,那么保留站需要保存该操作数,否则要保存将要提供该操作数的保留站的名字
18、。load-store缓存保存从存储器中读出或即将要保存到存储器中去的数据或数据地址。浮点寄存器通过一对总线和功能单元相连,通过一条单独的总线和store缓存相连。从功能单元和存储器中得到的结果被送往公共数据总线。保留站均设置标签域,用于流水线控制。2.4 采用动态调度克服数据冒险o指令运行的三个阶段 1、发射:从指令队列中取到下一条指令,指令队列按FIFO顺序维护,以保证正确的数据流。如果有匹配的空闲保留站,并且指令的操作数的值也保存在寄存器中,则将指令和操作数的值一起发射到该保留站中一起发射到该保留站中。如果没有空闲的保留站,则说明发生结构冒险,指令会被停顿,直至出现可用的保留站或缓存。如
19、果操作数不在寄存器中,则需要跟踪将要产生该操作数的功能单元,寄存器重命名在这一步进行。2.4 采用动态调度克服数据冒险o指令运行的三个阶段 2、执行:如果有一个或多个操作数处于不可用状态,则监视公共数据总线,等待这些操作数被计算出来。当一个操作数可用时,该操作数将被放入等待它的保留站中。当指令所需的所有操作数都已就绪时,该指令将在相应的功能单元中执行。通过在操作数可用之前延迟指令的执行,避免了RAW冒险。如果多条指令在同一个时钟周期内就绪,则功能单元将被迫在就绪指令间做出选择。2.4 采用动态调度克服数据冒险o指令运行的三个阶段 2、执行:为了保护异常行为,在程序顺序中的所有前序转移完成之前,
20、任何指令都不能开始执行。这个约束可以确保在执行过程中引起异常的指令会被执行。3、写结果:当结果就绪时,将其写到公共数据总线上,并由此送往等待它的寄存器和保留站。当指令已经被发射且正在等待源操作数时,标签字段将指向包含将产生源操作数指令的保留站号,比如0则表明操作数已经在寄存器中就绪。2.4 采用动态调度克服数据冒险oTomasulo算法 Tomasulo方法采用总线广播结果的方式,由保留站监听,这种方法实现了静态流水线调度中直接通路和旁路技术的功能,而在动态调度方法中,为了达到同样的目标,需要在源和结果之间增加一个时钟周期的时延,与功能单元产生结果相比,动态调度流水线中生产指令和消费指令之间的
21、有效时延至少要多花一个时钟周期。每个保留站有七个字段,见P66.2.6 基于硬件的推测 当我们试图进一步开发指令级并行时,维护控制相关性便成为一个严重的负担。转移预测技术减少了直接由转移引起的停顿,但是要想使处理器在一个时钟周期内执行多条指令,仅靠转移预测恐怕无法使我们获得期望的指令级并行度。为了保持最高性能,一个宽发射处理器可能需要每个时钟周期都执行一条转移指令,因此,要想进一步开发并行度,就必须克服控制相关带来的问题。可以通过推测转移的结果,并按照推测正确的情况执行指令,以达到克服控制相关的目的。2.6 基于硬件的推测o基于硬件的推测综合以下三种思想 通过动态转移预测选择要执行的指令,通过
22、推测技术允许指令在控制相关消除之前开始执行(能够消除错误推测序列的影响),通过动态调度处理几个不同的基本块之间的调度(作为比较,没有推测的动态调度只能在基本块之间实现部分重叠)2.6 基于硬件的推测o基于硬件的推测 为了扩展Tomasulo算法并使其支持推测技术,必须将指令结果的旁路操作(推测执行指令需要指令结果的旁路操作)从实际的指令完成中分离出来。通过这种分离,可以允许指令将它的执行结果旁路给其他指令,而在确定而不是推测指令的执行之前,不允许做任何更新。2.6 基于硬件的推测o基于硬件的推测 实现推测技术的关键思想是允许指令乱序执行,但是要求指令必须按序提交,并且在指令提交之前阻止所有不可
23、恢复的动作(比如更新状态或产生异常)。当使用推测技术扩展动态调度时,必须将指令的完成与指令提交区分开来,因为指令可能在提交之前已经完成。在指令执行过程中需要一组硬件缓存的支持,使用这些缓存保存已经执行完但还没有提交的指令执行结果,这些硬件缓存称为重排序缓存。2.6 基于硬件的推测o重排序缓存(ROB)重排序缓存提供了附加的寄存器,这种方法与Tomasulo算法通过保留站扩展寄存器集类似。在指令运算完成到提交这段时间内,重排序缓存为指令保存结果。即在这段时间内,ROB是指令的操作数源,但ROB与保留站的重要区别是:在Tomasulo算法中,当指令完成写结果的操作后,所有的后继指令都将从寄存器文件
24、中读取结果;而在推测技术中,只有在指令提交之后寄存器文件才会被更新。2.6 基于硬件的推测o重排序缓存(ROB)重排序缓存每一个入口都包含4个字段:指令类型、目标字段、值字段和就绪字段。指令类型字段表明指令是转移运算、store操作还是寄存器运算。目标字段提供寄存器序号或存储器地址,指令将把结果写向目标字段指向的寄存器或存储器 值字段用来在指令提交之前,保存指令执行结果的值,就绪字段表明指令已经完成它的执行,其结果已经可用。2.6 基于硬件的推测o处理器硬件结构 见图2.14。尽管ROB替代了保留站的重命名功能,但是在指令发射到指令开始执行这段时间内,仍然需要一个空间来缓存操作及操作数。这个功
25、能仍然由保留站来提供。由于所有指令在提交之前都在ROB中占有一个位置,因此,用ROB入口的序号作为结果的标签,而不是使用保留站的序号。这要求分配给指令的ROB序号必须能够记录在保留站中。这里实现时为重命名使用额外的寄存器,而ROB仅用于记录指令提交的时间。2.6 基于硬件的推测o指令的执行过程 指令的执行包括发射、执行、写结果和提交4个步骤,其中前3个步骤与Tomasulo算法类似,只增加了提交最后一个阶段。提交阶段是完成指令的最后一个阶段,这之后只有指令的结果被保留。当指令提交后,指令在ROB中的入口将被收回,寄存器或存储器将被更新,无须再占用ROB的入口。如果ROB已被填满,则只需要停止指
26、令的发射,直到有可用的入口出现为止。2.7多发射技术 采用前面几节中介绍的技术可以消除数据相关和控制相关引起的停顿,从而获得理想的CPI(理想CPI为多少?)。为了进一步提高性能,需要将CPI减小到1以下,但在每个时钟周期发射一条指令的前提下,无法实现这个目标。采用多发射技术可以解决此问题,多发射处理器的目标是允许在一个时钟周期内发射多条指令,重点介绍VLIW方法。2.7多发射技术oVLIW方法 VLIW(超长指令字)处理器每时钟周期发射固定数目的指令,这些指令被组织成一条长指令或一个固定的指令包,指令间的并行度由指令显式地表示出来。VLIW处理器采用编译器静态调度的方式。VLIW采用多个独立
27、的功能单元,将多个运算打包成一条长指令,或者要求发射包中的指令满足相同的约束,两种方法本质上相同。2.7多发射技术oVLIW方法 对于宽发射情况,VLIW的优势更加明显。为了使功能单元始终处于工作状态,代码序列必须含有足够的并行度,以填满功能单元的可用运算槽。代码序列中的并行度可用通过将循环展开,在每个单独的、更大的循环体中进行代码调度而实现。若并行度要求跨转移调度代码,则需要使用更复杂的全局调度算法,附录G中,讨论了一种专门为VLIW设计的全局调度技术,我们重点讨论无转移代码调度情况。2.7多发射技术oVLIW方法 为了克服代码快速增长带来的影响,可采用智能译码方法,比如让所有的功能单元使用
28、一个立即数字段;也可以在主存中压缩指令,当指令被读入Cache或被译码时再将它们解压缩。早期VLIW是锁步的,并且没有检测冒险的硬件,由于所有的功能单元必须保持同步,因此任意一个功能单元的停顿都将引起整个处理器的停顿。尽管编译器可以对确定的功能单元进行调度以阻止停顿,但是要预测停顿是困难的。在最近的处理器中,功能单元的操作越来越独立,指令发射后,由硬件负责检测指令异步执行。2.7多发射技术oVLIW方法-开发指令级并行首选方法 开发指令级并行度是所有多发射处理器所面临的一个共同挑战。某些情况下,向量处理器可以高效地执行浮点程序中的一些简单循环,而多发射处理器需要将循环展开才可以获得足够的并行度
29、。对于这类应用,很难确定多发射处理器是否真的优于向量处理器;当代价相同时,向量处理器可能会更快。然而多发射处理器的优势在于他们能够从结构化较差的代码中开发并行度,而能够从结构化较差的代码中开发并行度,而且有能力缓存所有格式的数据且有能力缓存所有格式的数据,这些原因使得多发射处理器成为开发指令级并行度的首选方法,而向量处理器只是作为多发射处理器的扩展和补充。2.9指令传送和推测的高级技术o提高取指令带宽 在高性能流水线特别是多发射流水线中,仅靠准确地预测转移是不够的,还需要传送高带宽的指令流。比如现代多发射处理器每时钟周期要传送4-8条指令。多发射处理器要求每时钟周期取到的平均指令数目不低于平均
30、吞吐量,这要求通向指令Cache的路径足够宽,带最困难的还是转最困难的还是转移的处理移的处理。2.9指令传送和推测的高级技术o转移目标缓存 为了减小流水线的转移代价,必须确定当前正在译码的指令是否是转移指令,如果是,那么下一条指令的地址是什么,如果是转移指令且知道下一条指令的地址,那么就可以将转移代价降为0。把为转移的后继指令保存预测地址的转移预测Cache称为转移目标缓存或转移目标Cache。2.9指令传送和推测的高级技术o转移目标缓存 由于转移目标缓存要预测下一条指令的地址,并且在指令译码结束前将预测地址发送出去,因此必须确定取到的指令是否是一条是否是一条被预测为将被选中的转移指令被预测为
31、将被选中的转移指令。如果地址匹配,则相应的预测指令地址将作为下一条指令的地址。转移预测缓存的硬件结构本质上与Cache的硬件结构一致(图2.22)。2.9指令传送和推测的高级技术o转移目标缓存 如果在转移目标缓存中发现了一个匹配的入口,则取指令立即从预测指令地址开始。由于在确定指令是否转移之前将预测地址发送出去,因此转移目标缓存的预测入口必须与指令完全匹配,若处理器不对这种匹配进行核实,那么在当前指令不是转移的情况下,发送出去的预测地址就是错误的,这会降低处理器的速度。在转移目标缓存中,只保存那些预测为被选中的只保存那些预测为被选中的转移转移。2.9指令传送和推测的高级技术o转移目标缓存 使用
32、转移目标缓存的详细步骤参考图2.23.在缓存中存在匹配的转移入口且预测正确的情况下,是不存在转移延迟的;否则,将至少付出2个时钟周期的转移代价。处理缓存缺失和预测错误是一个艰巨的挑战,因为必须在重写缓存入口的同时停止取指令的操作。2.9指令传送和推测的高级技术o转移目标缓存 转移目标缓存的另外一种形式是在缓存中保存一条或多条目标指令,以此作为预测目标地址的替代或补充。这种形式有两个潜在优势,首先,这种方法允许转移目标缓存的访问时间超过两个相继取指令操作的时间间隔,也可能允许更大的转移目标缓存;其次,通过缓存实际的指令可以实现优化,称之为转移隐含转移隐含,使用转移隐含,可以将无条件转移代价降为0
33、时钟周期。2.9指令传送和推测的高级技术o返回地址预测器 当要提高推测的准确性时,将面临间接转移带来的挑战,间接转移目标地址是在运行时确定的间接转移目标地址是在运行时确定的。高级编程语言会为间接程序调用、case选择语句以及goto语句生成这类转移,但间接转移大部分还是来自过程返回,而在面向对象的语言中,比如c+或Java,过程返回更加频繁。过程返回可使用堆栈作为返回地址缓存,该结构用来缓存最近的几个返回地址,当调用发生时将返回地址压入堆栈,调用返回时再将其弹出。若Cache足够大的话,它将出色地预测返回地址。2.9指令传送和推测的高级技术o集成的取指令单元 为了满足多发射处理器的要求,可选择
34、集成取指令单元的方法,将取指令作为一个独立自主取指令作为一个独立自主的单元来实现的单元来实现,由该单元为流水线的其他部分提供指令,当然,这会增加多发射的复杂性,不再将取指令视为一个单独的流水段。在最新设计中,集成取指令单元包含以下功能:集成的转移预测、指令预取、指令存储器访问和缓存。2.9指令传送和推测的高级技术o集成的取指令单元 1、集成的转移预测 转移预测成为取指令的一部分,并且持续对转移进 行预测,以驱动流水线的取指令操作。2、指令预取 为实现一个时钟周期内传送多条指令,取指令单元自主管理指令的预取,并将它同转移预测整合在一起。3、指令存储器访问和缓存 取指令单元提供缓存功能,作为一个按
35、需单元为发射流水段提供所需的指令。2.9指令传送和推测的高级技术o推测的实现问题和扩展 探讨三个问题:寄存器重命名与重排序缓存、多转移推测和值预测。支持推测:寄存器重命名与重排序缓存 在寄存器重命名方法中,物理寄存器的扩展集被用来保存结构可见寄存器和临时值,扩展寄存器替代了ROB和保留站的功能。重命名方法较ROB方法的一个优势在于指令提交的简化,但撤销分配寄存器的工作会更复杂,因为在释放物理寄存器之前,必须确定它与任何系统结构寄存器不再对应,且对该寄存器的使用已全部完成。2.9指令传送和推测的高级技术o推测的代价 推测技术的明显优势在于它能够尽早发现可能导致流水线停顿的事件,比如Cache缺失
36、等。然这种潜在的优势伴随明显的缺点。推测不是免费的,它需要消耗时间、消耗能量,恢复错误的推测还会降低流水线的性能,执行更高指令速率还需占用额外的资源,最后,推测还会引起异常的发生。2.9指令传送和推测的高级技术o推测的代价 为了将推测的代价降到最小,大多数推测处理器只允许低代价的异常事件发生,如果发生了代价昂贵的异常事件,处理器在处理该事件之前,必须等待引起该事件的指令推测性质消失,尽管这会轻微影响程序的一些性能,但相对于特别是在频繁发生此类事件且转移预测率不够理想的情况,这种方法能够有效地避免性能损失。随着处理器的发展,推测技术所付出的代价以及宽发推测技术所付出的代价以及宽发射和推测所受的限
37、制都将变得越来越明显射和推测所受的限制都将变得越来越明显,此问题后面章节继续讨论。2.9指令传送和推测的高级技术o多转移预测 有三种情况可以从多转移预测中受益:转移频率非常高,转移明显成簇,以及功能单元延迟较长。前两种情况下,获得高性能意味着同时有多条转移被推测,甚至是每时钟周期处理一每时钟周期处理一条以上的转移条以上的转移。数据库程序以及其他一些结构化较差的定点计算通常具有此类特性,因此,推测多条转移对于此类程序非常重要。同样,多转移是一种在长流水线中避免停顿的方法。2.9指令传送和推测的高级技术o值预测 值预测是一种提高程序中可用指令级并行度的技术。值预测尝试对指令将要产生结果的值进行预测。由于大多数指令在执行时产生的结果并不相同,因此值预测的成功率是有限的。但是,值预测对于某些特定类型的指令来说却是可行的,如读取一个常量池,或是一个相对稳定变量的 load指令。2.9指令传送和推测的高级技术o值预测 值预测的研究大多集中在load指令上,可以通过检测load返回值与最近几次load执行结果的匹配比率来确定值预测可能达到的最高准确率,最简单的情况是检查load返回值与上一次执行得到的值是否匹配。鉴于预测错误会付出高昂代价且预测错误率相当高,目前还没有没有一款应用这项技术的商用处理器出现。
限制150内