“计算机system结构”电子教案[课7].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文档。上传文档
查看更多
“计算机system结构”电子教案[课7]

第6章 指令级并行软件方法 (指令级,多发射或乱序执行,静态调度);  教材P154第一段说可以采用图3.17的5段整数流水线(下图a)来讨论本节(本章)的整数、浮点数混合运算程序,实际上解释不通,我们改用下图b的整数、浮点分离的流水线结构来讨论。;(3) (4);6.1.1 指令调度方法   基本原理是按两条相关指令之间所需的最小启动距离将它们隔开,在二者之间安排其它的无关指令,减少直至消除流水线停顿。 例6.1(P154):将如下C语言源程序编译成MIPS目标代码,然后使用指令调度技术、延迟分支技术优化其代码性能(指缩短运行时间)。 for(i=1000;i0;i- -) x[i]=x[i]+s; 解: (1)初步编译结果如下 Loop: L.D F0, 0(R1) //F0←1个向量元素 ADD.D F4, F0, F2 //F4←F0+F2(即标量s) S.D F4, 0(R1) //F4存回向量元素 DADDIU R1, R1, #-8 //R1←R1-8(指向前1个元素,长浮点) BNE R1, R2, Loop //若R1≠R2,转Loop;调度前的相关链分析 : 代码性能:每轮循环完成1个浮点元素运算,需10拍,其中5拍是空转。;模拟软件Cycles图: 模拟结果比分析结果多1拍的原因在于模拟器的流水线存在“结构冲突”。;(2) 调度、延迟分支后的相关链分析 (注意S.D指令需要修改offset值): 代码性能:每轮循环完成1个浮点元素运算,需6拍,其中1拍是空转。 模拟软件Cycles图:;  从有效操作比例看,刚才的例子中每个浮点元素运算中使用3条有效指令,附加2条循环控制指令,辅助操作占了太高的比例。   循环展开的目的一是降低辅助操作的比例,二是通过合并来增加每个循环体中的指令条数,使指令调度有更大的调整范围,优化效果更好。 例6.2(P155):将例6.1未优化程序展开3次得到4个循环体,然后使用指令调度技术、延迟分支技术优化其代码性能。假设原循环次数是4的整倍数。 解:先讨论几个注意事项。 如果各轮循环之间不存在相关,展开后可以简单并行,否则需处理; 如果原循环次数N=展开倍数M×K(K是整数),则新的循环次数K=N/M,否则要在循环结束之后增加补偿代码??完成剩余的操作; 原来多轮循环重复使用的寄存器,合并之后必须通过重命名来区分,否则发生名相关,限制并行性; 原来各轮循环中的循环控制指令,合并后可以减少。;(1)展开后没有调度的程序如下 Loop: L.D F0, 0(R1) ;F0 ← x[i](取数) ADD.D F4, F0, F2 ;F4 ← F0 + F2 S.D F4, 0(R1) ;x[i] ← F4(存结果) L.D F6, -8(R1) ;F6 ← x[i-1](取数) ADD.D F8, F6, F2 ;F8 ← F6 + F2 S.D F8, -8(R1) ;x[i-1] ← F8(存结果) L.D F10,-16(R1) ;F10 ← x[i-2](取数) ADD.D F12, F10, F2 ;F12 ← F10 + F2 S.D F12, -16(R1) ;x[i-2] ← F12(存结果) L.D F14, -24(R1) ;F14 ← x[i-3](取数) ADD.D F16, F14, F2 ;F16 ← F14 + F2 S.D F16, -24(R1) ;x[i-3] ← F16(存结果) DADDIU R1, R1, #-32 ;R1 ← R1 - 4×8(指针前移4个数) BNE R1, R2, Loop ;若 R1≠R2,循环;调度前的相关链分析 (未完,接下页):;代码性能:每轮循环完成4个浮点元素运算,共28拍,其中14拍是空转。折算每个浮点元素运算使用28/4=7拍(展开前10拍),其中3.5拍是空转。;(2)展开后经过调度优化的程序如下 loop: L.D F0, 0(R1) ;F0 ← x[i](取数) L.D F6, -8(R1) ;F

文档评论(0)

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

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

1亿VIP精品文档

相关文档