第5-6章 指令级并行(简化版).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
指令级并行:指令之间存在的一种并行性,利用它,计算机可以并行执行两条或两条以上的指令。 (ILP:Instruction-Level Parallelism) 开发ILP的途径有两种 资源重复,重复设置多个处理部件,让它们同时执行相邻或相近的多条指令; 时间重叠,采用流水线技术,使指令重叠并行执行。 开发ILP的方法可以分为两大类 主要基于硬件的动态开发方法 基于软件的静态开发方法 流水线处理机的实际CPI 理想流水线的CPI加上各类停顿的时钟周期数: CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突 + 停顿控制冲突 理想CPI是衡量流水线最高性能的一个指标。 相关与流水线冲突 相关有三种类型: 数据相关、名相关、控制相关 相关是程序固有的一种属性,它反映了程序中指令之间的相互依赖关系。 流水线冲突是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。 流水线冲突有三种类型:结构冲突、数据冲突、控制冲突 5.2 相关与指令级并行 2. 控制相关并不是一个必须严格保持的关键属性。 有时,不遵守控制相关既不影响异常行为,也不改变数据流。 可以大胆地进行指令调度,把失败分支中的指令调度到分支指令之前。 5.2 相关与指令级并行 3. 对于正确地执行程序来说,必须保持的最关键的两个属性是:数据流和异常行为。 保持异常行为是指:无论怎么改变指令的执行顺序,都不能改变程序中异常的发生情况。 即原来程序中是怎么发生的,改变执行顺序后还是怎么发生。 可弱化为:指令执行顺序改变不能导致程序中发生新的异常。 数据流:指数据值从其产生者指令到其消费者指令的实际流动。 分支指令使得数据流具有动态性,因为一条指令有可能数据相关于多条先前的指令。 分支指令的执行结果决定了哪条指令真正是所需数据的产生者。 静态调度 依靠编译器对代码进行静态调度,以减少相关和冲突。 它不是在程序执行的过程中、而是在编译期间进行代码调度和优化。 通过把相关的指令拉开距离来减少可能产生的停顿。 动态调度 在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿。 5.3 指令的动态调度 能够处理一些在编译时情况不明的相关(比如涉及到存储器访问的相关),并简化了编译器; 能够使本来是面向某一流水线优化编译的代码在其它的流水线(动态调度)上也能高效地执行。 以硬件复杂性的显著增加为代价 5.3 指令的动态调度 到目前为止我们所使用流水线的最大的局限性: 指令是按序流出和按序执行的 考虑下面一段代码: DIV.D F4,F0,F2 ADD.D F10,F4,F6 SUB.D F12,F6,F14 ADD.D指令与DIV.D指令关于F4相关,导致 流水线停顿。 SUB.D指令与流水线中的任何指令都没有关 系,但也因此受阻。 5.3 指令的动态调度 在前面的基本流水线中: 5.3 指令的动态调度 为了使上述指令序列中的SUB.D指令能继续执行下去,必须把指令流出的工作拆分为两步: 检测结构冲突 等待数据冲突消失 只要检测到没有结构冲突,就可以让指令流出。并且流出后的指令一旦其操作数就绪就可以立即执行。 (修改后的流水线是乱序执行的) 乱序执行 指令的执行顺序与程序顺序不相同 指令的完成也是乱序完成的 5.3 指令的动态调度 为了支持乱序执行,我们将5段流水线的译码阶段再分为两个阶段: 流出(Issue,IS):指令译码,检查是否存在结构冲突。若不存在,就将指令流出。 读操作数(Read Operands,RO):等待数据冲突消失(如果有的话),然后读操作数。 5.3 指令的动态调度 在前述5段流水线中,是不会发生WAR冲突和WAW冲突的。但乱序执行就使得它们可能发生了。 例如,考虑下面的代码 DIV.D F10, F0, F2 ADD.D F10, F4, F6 SUB.D F6, F8, F14 5.3 指令的动态调度 动态调度的流水线支持多条指令同时处于执行段。 要求:具有多个功能部件、或者功能部件流水化、或者兼而有之。 指令乱序完成带来的最大问题: 异常处理比较复杂 (精确异常处理、不精确异常处理) 动态调度的处理机要保持正确的异常行为 对于一条会产生异常的指令来说,只有当处理机确切地知道该指令将被执行时,才允许它产生异常。 5.3 指令的动态调度 即使保持了正确的异常行为,动态调度处理机仍可能发生不精确异常。 不精确异常:当执行指令i导致发生异常时,处理机的现场(状态)与严格按程序顺序执行时指令i的现场不同。 发生不精

文档评论(0)

82393aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档