- 1、本文档共141页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
几乎所有的处理机都利用流水线使指令重叠并行执行,以达到提高性能的目的。这种指令之间存在的潜在并行性称为指令级并行。 (ILP:Instruction-Level Parallelism) 本章研究:如何通过各种可能的技术,获得更多的指令级并行性。 硬件+软件技术 必须要硬件和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行。 流水线处理机的实际CPI 理想流水线的CPI加上各类停顿的时钟周期数: CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突 + 停顿控制冲突 理想CPI是衡量流水线最高性能的一个指标。 IPC:Instructions Per Cycle (每个时钟周期完成的指令条数) 基本程序块 基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。 程序平均每5~7条指令就会有一个分支。 循环级并行:使一个循环中的不同循环体并行执行。 开发循环体中存在的并行性 最常见、最基本 是指令级并行研究的重点之一 例如,考虑下述语句: for (i=1; i=500; i=i+1) a[i]=a[i]+s; 每一次循环可以与其他的循环重叠并行执行; 在每一次循环的内部,却没有任何的并行性。 最基本的开发循环级并行的技术 循环展开(loop unrolling)技术 采用向量指令和向量数据表示 流水线冲突:是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。 相关是程序固有的一种属性,它反映了程序中指令之间的相互依赖关系。 具体的一次相关是否会导致实际冲突的发生以及该冲突会带来多长的停顿,则是流水线的属性。 可以从两个方面来解决相关问题: 保持相关,但避免发生冲突。 通过代码变换,消除相关。 控制相关并不是一个必须严格保持的关键属性 程序正确执行的两个基本属性:数据流和异常行为。 保持异常行为:无论怎么改变指令的执行顺序,都不能改变程序中异常的发生情况。 弱化为:指令执行顺序的改变不会引发新的异常。 有时不遵守控制相关,既不影响异常行为,也不改变数据流。 可以大胆地进行指令调度,把失败分支中的指令调度到分支指令之前。改为: DADDU R1,R2,R3 BEQZ R12,Skipnext DSUBU R4,R5,R6 DADDU R5,R4,R9 Skipnext:OR R7,R8,R9 静态调度 依靠编译器对代码进行静态调度,以减少相关和冲突 基本思路:通过把相关的指令拉开距离以减少可能产生的停顿。 动态调度 在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿。 能够处理一些在编译时情况不明的相关(比如涉及到存储器访问的相关),并简化了编译器; 能够使本来仅面向某一流水线优化编译的代码在其他的流水线(动态调度)上也能高效地执行。 以增加硬件的复杂性为代价 到目前为止我们所使用流水线的最大的局限性: 指令必须按序流出和执行 考虑下面一段代码: DIV.D F4,F0,F2 SUB.D F10,F4,F6 ADD.D F12,F6,F14 SUB.D指令与DIV.D指令有F4相关,导致流水线停顿。 ADD.D指令与流水线中的任何指令都没有关系,但也因此受阻。 在前面的基本流水线中: 为了允许乱序执行,我们将5段流水线的译码阶段再分为两个阶段: 流出(Issue,IS):指令译码,检查是否存在结构冲突。(in-order issue) 读操作数(Read Operands,RO):等待数据冲突消失,然后读操作数。 (out of order execution) 在前述5段流水线中,是不会发生WAR冲突和WAW冲突的。但乱序执行就使得它们可能发生了。 例如,考虑下面的代码 DIV.D F10, F0, F2 SUB.D F10, F4, F6 ADD.D F6, F8, F14 指令乱序完成带来的最大问题:异常处理比较复杂,分精确异常处理和不精确异常处理; 核心思想 记录和检测指令相关,操作数一旦就绪就立即执行,把发生WAR冲突的可能性减少到最小; 通过寄存器换名来消除RAW冲突和WAW冲突。 IBM 360/91首先采用了Tomasulo算法。 IBM 360/91的设计目标是基于整个360系列的统一指令集和编译器来实现高性能,而不是设计和利用专用的编译器来提高性能。 需要更多地依赖于硬件。 IBM 360体系结构只
文档评论(0)