体系结构第4章 第1讲.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
体系结构第4章 第1讲

第四章 指令级并行 主要内容 4.1 指令级并行的概念 4.2 指令的动态调度 4.3 控制相关的动态解决技术 4.4 多指令流出技术 4.1指令级并行的概念 当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行 Instruction-Level Parallelism 简记为ILP 如何知道指令之间可以并行?硬、软件如何支持指令级并行?如何研究这些问题? 硬件技术或者软件技术都可以提高指令级并行性 必须要硬件技术和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行 性能评价:CPI计算 流水线处理器的实际CPI(平均每条指令使用的周期数)等于理想流水线的CPI加上各类停顿引起的周期数的总和 CPI流水线 = CPI理想 + 停顿结构相关 + 停顿先写后读 + 停顿先读后写 + 停顿写后写 + 停顿控制相关 减少其中的任何一种停顿,都可以有效地减少CPI,从而提高流水线的性能 本章研究的技术及克服的停顿 软件和硬件的支持 上述技术中有些技术主要是硬件支持 循环展开 寄存器换名的动态调度(基本的Tomasulo’s) 动态分支指令预测 每个周期多发射 前瞻技术 所有的技术都必须和软件,特别是编译器合作完成 几个基本概念 基本(程序)块:一段除了入口和出口以外不包含其它分支的线性代码段 程序平均每6~7条指令就会有一个分支 必须在多个基本块之间开发指令级的并行性 循环级并行:循环体中指令之间的并行性 开发循环级并行的基本技术方法 指令调度(scheduling) 循环展开(loop unrolling) 换名(renaming) 4.1.1循环展开调度的基本方法 循环展开是展开循环体若干次,将循环级并行转化为指令级并行的技术 这个过程既可以通过编译器静态完成,也可以通过硬件动态进行 开发循环级并行性的另外一个重要技术是向量处理技术 具有向量处理指令的典型机器是向量计算机,有关向量处理和向量计算机的内容本章不作讨论 本章中的分支指令就是指条件转移指令 本章通用浮点流水线延迟表 编译器在完成这种指令调度时,受限于以下两个特性 一是程序固有的指令级并行性 二是流水线功能部件的执行延迟 本章中使用的浮点流水线的延迟如下表 流水线其他特性说明 整数流水线采用改进的MIPS整数流水线 由于数据的取操作的结果可以毫无停顿的通过相关通路机制传送到数据存部件,所以延迟为0 定向通道或旁路机制 分支指令,由整数流水线执行 分支条件检测调整到ID段 如果分支指令使用上一条指令的结果作为分支条件,将要延迟1节拍 分支指令有1个节拍的延迟槽 浮点运算一般为64位 无结构冒险 循环展开实例 对于下面的源代码,在不进行指令调度和进行指令调度两种情况下,分析代码一次循环的执行时间 for (i=1; i=1000; i++) x[i] = x[i] + s; 编译过程 每一遍循环之间是不存在相关的 多遍循环可以同时执行而不会导致结果的错误 变量分配寄存器 整数寄存器R1用作循环计数器,初值为向量中最高端地址元素的地址 浮点寄存器F2用于保存常数S 为简单起见,假定最低端元素的地址为8 否则需要另外的指令来将它和R1做比较 MIPS汇编语言程序 程序转换成MIPS汇编语言程序 Loop: LD F0,0(R1) ;F0为向量元素 ADDD F4,F0,F2 ;加常数F2 SD 0(R1),F4 ;保存结果 SUBI R1,R1,#8 ;修改指针 BNEZ R1,Loop ;循环控制 循环无调度执行 循环无调度执行 循环无调度执行 循环无调度执行 循环无调度执行 循环无调度执行 循环无调度执行 循环无调度执行结果分析 每遍循环需要10个时钟节拍 只有3个时钟节拍(L.D, ADD.D, S.D) 有效比率为30% 空转5个时钟节拍 (50%) 循环控制2个时钟节拍 (20%) 调度代码,减少空转 调度代码 调度代码 调度代码 调度代码 调度代码 如何进行调度 通过一个好的编译器来调度可以 调换SUBI和SD的位置 将SD指令移到BNEZ的延迟槽内 改变SD存取指令访问内存地址的偏移量 调度代码结果分析 每遍循环6个时钟节拍 和未调度代码比较,加速比 10/6=1.7 3个有效时钟节拍 (L.D, ADD.D, S.D) 节拍有效比率50% 1拍空转 (占17%) 2拍循环控制 (占33%) 如何进一步减少空转和循环控制占用的比率? 循环展开 如果将循环展开3次得到4个循环体(假设向量包含了4的倍数的元素) Loop: L.D F0,0(R1) ADD.D F4,F0,F2 S.D

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档