计算机体系结构(张晨曦)第4章_PPT.ppt

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

4.5 循环展开和指令调度 例子中的问题及解决方案 只有L.D、ADD.D和S.D这3条指令是有效操作。 (取、加、存) 占用3个时钟周期。 而DADDIU、空转和BEN这3个时钟周期都是附加的循环控制开销。 循环展开技术 把循环体的代码复制多次并按顺序排列,然后相应调整循环的结束条件。 这给编译器进行指令调度带来了更大的空间。 4.5 循环展开和指令调度 例4.7 (体现循环展开技术的特点) 将上述例子中的循环展开3次得到4个循环体,然后对展开后的指令序列在不调度和调度两种情况下,分析代码的性能。假定R1的初值为32的倍数,即循环次数为4的倍数。消除冗余的指令,并且不要重复使用寄存器。 解 无需在循环体后面增加补偿代码 4.5 循环展开和指令调度 F0、F4:用于展开后的第1个循环体 F2:保存常数 F6、F8:展开后的第2个循环体 F10、F12:第3个循环体 F14、F16:第4个循环体 分配寄存器(不重复使用寄存器 ): 展开后没有调度的代码如下: 指令流出时钟 Loop: L.D F0,0(R1) 1 (空转) 2 ADD.D F4,F0,F2 3 (空转) 4 (空转) 5 S.D F4, 0(R1) 6 L.D F6,-8(R1) 7 (空转) 8 ADD.D F8,F6,F2 9 (空转) 10 (空转) 11 S.D F8, -8(R1) 12 L.D F10,-16(R1) 13 (空转) 14 指令流出时钟 ADD.D F12,F10,F2 15 (空转) 16 (空转) 17 S.D F12,-16(R1) 18 L.D F14,-24(R1) 19 (空转) 20 ADD.D F16,F14,F2 21 (空转) 22 (空转) 23 S.D F16,-24(R1) 24 DADDIU R1,R1,#-32 25 (空转) 26 BNE R1,R2,Loop 27 (空转) 28 4.5 循环展开和指令调度 结果分析: 这个循环每遍共使用了28个时钟周期。 有4个循环体,完成4个元素的操作。 平均每个元素使用28/4=7个时钟周期 原始循环的每个元素需要10个时钟周期。 节省的时间:从减少循环控制的开销中获得的。 在整个展开后的循环中,实际指令只有14条,其他14个周期都是空转。 效率并不高 对指令序列进行优化调度,以减少空转周期: 指令流出时钟 Loop: L.D F0,0(R1) 1 L.D F6,-8(R1) 2 L.D F10,-16(R1) 3 L.D F14,-24(R1) 4 ADD.D F4,F0,F2 5 ADD.D F8,F6,F2 6 ADD.D F12,F10,F2 7 ADD.D F16,F14,F2 8 S.D F4,0(R1) 9 S.D F8,-8(R1) 10 DADDIU R1,R1,#-32 12 S.D F12,16(R1) 11 BNE R1,R2,Loop 13 S.D F16,8(R1) 14 4.5 循环展开和指令调度 结果分析: 没有数据相关引起的空转等待。 整个循环仅仅使用了14个时钟周期。 平均每个元素的操作使用14/4=3.5个时钟周期。 通过循环展开、寄存器重命名和指令调度,可以有效地开发出指令级并行。 4.5 循环展开和指令调度 循环展开和指令调度时要注意以下几个方面: 保证正确性。 在循环展开和调度过程中尤其要注意两个地方的正确性:循环控制,操作数偏移量的修改。 注意有效性。 只有能够找到不同循环体之间的无关性,才能有效地使用循环展开。 使用不同的寄存器。 (否则可能导致新的冲突) 删除多余的测试指令和分支指令,并对循环结束代码和新的循环体代码进行相应的修正。 4.5 循环展开和指令调度 注意对存储器数据的相关性分析 例如:对于load指令和store指令,如果它们在不同的循环迭代中访问的存储器地址是不同的,它们就是相互独立的,可以相互对调。 注意新的相关性 由于原循环不同次的迭代在展开后都到了同一次循环体中,因此可能带来新的相关性。 4.5 循环展开和指令调度 根

文档评论(0)

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

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

1亿VIP精品文档

相关文档