汇编-并行计算(指令级).pptVIP

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编-并行计算(指令级)

第四章 指令级并行 Instruction-Level Parallelism, ILP 第四章 指令集并行 指令的相关 指令之间存在的潜在并行性称为指令级并行(Instruction-Level parallelism, ILP) 思考:是什么阻碍实现指令级并行? CPI流水线 = CPI理想 ? 第四章 指令集并行 指令的相关 程序中指令之间的依赖关系,描述了指令和指令之间的属性 数据相关:指令 i 以后的指令使用 i 产生的结果 名相关:指令使用的寄存器或者存储器称为名 反相关 : 指令 j 写的名是 指令 i 读的名 输出相关:指令 j 写的名是 指令 i 写的名 控制相关 ? 流水线控制冲突(相关) 第四章 指令级并行 指令的相关与流水线相关(冲突) 指令的相关是程序的固有属性;流水线的冲突(相关)是由于指令的相关属性导致的。对应关系: 数据相关 ?流水线写后读冲突(相关) 名相关 反相关 ? 流水线写后写冲突(相关) 输出相关 ? 流水线读后写冲突(相关) 控制相关 ? 流水线控制冲突(相关) 第四章 指令集并行 流水线实际CPI 理想流水线的CPI加上各类停顿的时钟周期数: CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突+ 停顿控制冲突 理想CPI是衡量流水线最高性能的一个指标。 IPC:Instructions Per Cycle (每个时钟周期完成的指令条数) 第四章 指令级并行 本章所研究的技术 第四章 指令级并行 循环级并行性 基本程序块 基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。 程序平均每5~7条指令就会有一个分支。 第四章 指令级并行 循环级并行性 基本程序块 基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。 程序平均每5~7条指令就会有一个分支。 第四章 指令级并行 循环级并行 循环级并行:使一个循环中的不同循环体并行执行。 开发循环体中存在的并行性 最常见、最基本 是指令级并行研究的重点之一 例如,考虑下述语句: for (i=1; i=500; i=i+1) a[i]=a[i]+s; 每一次循环都可以与其他的循环重叠并行执行; 在每一次循环的内部,却没有任何的并行性。 本节中,我们使用的浮点流水线延迟为: 例4.6 对于下面的源代码,转换成MIPS汇编语言,在不进行指令调度和进行指令调度两种情况下,分析其代码一次循环所需的执行时间。 for (i=1; i=1000; i++) x[i] = x[i] + s; 把该程序翻译成MIPS汇编语言代码: Loop:L.D F0,0(R1) // 取一个向量元素放入F0 ADD.D F4,F0,F2 // 加上在F2中的标量 S.D F4, 0(R1) // 保存结果 DADDIU R1,R1,#-8 //指针减8(每个数据占8个字节) BNE R1,R2,Loop // 如果R1不等于R2,未结束,继续 其中: 整数寄存器 R1:指向向量中的当前元素,初值为向量中最高端元素的地址) 整数寄存器 R2:8(R2)指向最后一个元素。 浮点寄存器 F2:用于保存常数 s。 不进行指令调度的情况下,程序的实际执行情况: 指令调度以后,程序的执行情况如下: 把DADDIU指令调度到了L.D指令和ADD.D指令之间的“空转”拍。 把S.D指令放到了分支指令的延迟槽中。 对存储器地址偏移量进行调整。 问题 只有L.D、ADD.D和S.D这3条指令是有效操作。 (取、加、存)占用3个时钟周期。 而DADDIU、空转和BEN这3个时钟周期都是附加的循环控制开销。 如何改进? 循环展开技术 把循环体的代码复制多次并按顺序排列,然后相应调整循环的结束条件。 这给编译器进行指令调度带来了更大的空间。 第四章 指令级并行 循环展开调度基本方法 基本思想:把循环展开后,通过重命名和指令调度来开发更多的并行性。 调度: 通过改变指令在程序中的位置,将相关指令之间的距离加大到不小于指令执行延迟的周期数,这样就可以将相关的指令转化为无关指令。 编译器完成这种指令调度的能力受限于两个特性: 程序固有的指令级并行性; 流水线功能部件的执行延迟。 循环展开和指令调度时要注意以下几个方面: 保证正确性。 在循环展开和调度过程中尤其要注意两个地方的正确性:循环控制,操作数偏移量的修改。 注意有效性。 只

文档评论(0)

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

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

1亿VIP精品文档

相关文档