欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《计算机系统结构》电子教案(课7).ppt

    • 资源ID:6529056       资源大小:251.50KB        全文页数:28页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《计算机系统结构》电子教案(课7).ppt

    计算机系统结构,1,第6章 指令级并行软件方法(指令级,多发射或乱序执行,静态调度),本章学习由软件(即编译程序)实现的指令级并行方法,主要内容是如何修改、优化已编译完的目标程序,以减少指令间冲突造成的停顿,缩短程序执行时间。6.1 基本指令调度及循环展开6.5 开发更多的指令级并行,计算机系统结构,2,教材P154第一段说可以采用图3.17的5段整数流水线(下图a)来讨论本节(本章)的整数、浮点数混合运算程序,实际上解释不通,我们改用下图b的整数、浮点分离的流水线结构来讨论。,第6章采用的流水线模型,整数ALU浮点ALU(b)实际可用的流水线结构,整数、浮点共用ALU(a)图3.17流水线结构(P71),WB,MEM,IF,ID,F0,F1,F2,F3,WB,MEM,EX,IF,ID,WB,MEM,EX,计算机系统结构,3,(3)(4),(1)(2),(1)采用P90图3.33的优化流水线方案:相关指令之间采用定向技术(包括前、后半周期定向),以减少停顿;在ID段处理分支指令,分支停顿为1个时钟周期;采用延迟分支技术,设1个延迟槽。(2)相关浮点指令之间的停顿:浮点数在“执行”段需4拍,其它段为1拍。两条相关的浮点指令之间的最少停顿周期数如下表(即教材P153表6.1),第6章采用的流水线模型,IF,ID,F0,Mem,WB,IF,ID,EX,Mem,WB,F1,F2,F3,IF,ID,F0,Mem,WB,F1,F2,F3,IF,ID,F0,Mem,WB,F1,F2,F3,IF,ID,EX,Mem,WB,IF,ID,F0,Mem,WB,F1,F2,F3,IF,ID,EX,Mem,WB,IF,ID,EX,Mem,WB,计算机系统结构,4,6.1.1 指令调度方法基本原理是按两条相关指令之间所需的最小启动距离将它们隔开,在二者之间安排其它的无关指令,减少直至消除流水线停顿。例6.1(P154):将如下C语言源程序编译成MIPS目标代码,然后使用指令调度技术、延迟分支技术优化其代码性能(指缩短运行时间)。for(i=1000;i0;i-)xi=xi+s;解:(1)初步编译结果如下Loop:L.D F0,0(R1)/F01个向量元素 ADD.D F4,F0,F2/F4F0+F2(即标量s)S.D F4,0(R1)/F4存回向量元素 DADDIU R1,R1,#-8/R1R1-8(指向前1个元素,长浮点)BNE R1,R2,Loop/若R1R2,转Loop,6.1 基本指令调度及循环展开,计算机系统结构,5,调度前的相关链分析:代码性能:每轮循环完成1个浮点元素运算,需10拍,其中5拍是空转。,6.1 基本指令调度及循环展开,计算机系统结构,6,模拟软件Cycles图:模拟结果比分析结果多1拍的原因在于模拟器的流水线存在“结构冲突”。,6.1 基本指令调度及循环展开,计算机系统结构,7,(2)调度、延迟分支后的相关链分析(注意S.D指令需要修改offset值):代码性能:每轮循环完成1个浮点元素运算,需6拍,其中1拍是空转。模拟软件Cycles图:,6.1 基本指令调度及循环展开,计算机系统结构,8,从有效操作比例看,刚才的例子中每个浮点元素运算中使用3条有效指令,附加2条循环控制指令,辅助操作占了太高的比例。循环展开的目的一是降低辅助操作的比例,二是通过合并来增加每个循环体中的指令条数,使指令调度有更大的调整范围,优化效果更好。例6.2(P155):将例6.1未优化程序展开3次得到4个循环体,然后使用指令调度技术、延迟分支技术优化其代码性能。假设原循环次数是4的整倍数。解:先讨论几个注意事项。如果各轮循环之间不存在相关,展开后可以简单并行,否则需处理;如果原循环次数N=展开倍数MK(K是整数),则新的循环次数K=N/M,否则要在循环结束之后增加补偿代码来完成剩余的操作;原来多轮循环重复使用的寄存器,合并之后必须通过重命名来区分,否则发生名相关,限制并行性;原来各轮循环中的循环控制指令,合并后可以减少。,6.1.2 循环展开方法,计算机系统结构,9,(1)展开后没有调度的程序如下Loop:L.D F0,0(R1);F0 xi(取数)ADD.D F4,F0,F2;F4 F0+F2 S.D F4,0(R1);xi F4(存结果)L.D F6,-8(R1);F6 xi-1(取数)ADD.D F8,F6,F2;F8 F6+F2 S.D F8,-8(R1);xi-1 F8(存结果)L.D F10,-16(R1);F10 xi-2(取数)ADD.D F12,F10,F2;F12 F10+F2 S.D F12,-16(R1);xi-2 F12(存结果)L.D F14,-24(R1);F14 xi-3(取数)ADD.D F16,F14,F2;F16 F14+F2 S.D F16,-24(R1);xi-3 F16(存结果)DADDIU R1,R1,#-32;R1 R1-48(指针前移4个数)BNE R1,R2,Loop;若 R1R2,循环,例6.2(P155),计算机系统结构,10,调度前的相关链分析(未完,接下页):,例6.2(续1),计算机系统结构,11,代码性能:每轮循环完成4个浮点元素运算,共28拍,其中14拍是空转。折算每个浮点元素运算使用28/4=7拍(展开前10拍),其中3.5拍是空转。,例6.2(续2),计算机系统结构,12,(2)展开后经过调度优化的程序如下loop:L.D F0,0(R1);F0 xi(取数)L.D F6,-8(R1);F6 xi-1(取数)L.D F10,-16(R1);F10 xi-2(取数)L.D F14,-24(R1);F14 xi-3(取数)ADD.D F4,F0,F2;F4 F0+F2 ADD.D F8,F6,F2;F8 F6+F2)ADD.D F12,F10,F2;F12 F10+F2)ADD.D F16,F14,F2;F16 F14+F2 S.D F4,0(R1);xi F4(存结果)S.D F8,-8(R1);xi-1 F8(存结果)DADDUI R1,R1,-32;R1 R1-48(指针前移4个数)S.D F12,16(R1);xi-2+4 F12(存结果,指针+32)BNE R1,R2,loop;若 R1R2,循环 S.D F16,8(R1);xi-3+4 F16(存结果,指针+32),例6.2(续3),计算机系统结构,13,调度后的相关链分析:,例6.2(续4),代码性能:每个浮点元素运算使用14/4=3.5拍,无空转。,计算机系统结构,14,习题改写(原题意思不清)以下向量点积循环段在教材图3.33所示改进流水线上运行,浮点运算延迟符合教材表6.1规定,F2的初值为0。loop:L.D F0,0(R1)L.D F4,0(R2)MUL.D F0,F0,F4 ADD.D F2,F0,F2 DADDUI R1,R1,#-8 DADDUI R2,R2,#-8(原题错写为R1)BNE R1,R3,loop(1)使用循环展开和指令调度改造程序(结果含3个循环体),使“空转”周期数不超过1个,写出新程序;(2)手工计算原程序处理每对元素所需的时钟周期数、其中的空转数;(3)手工计算新程序处理每对元素所需的时钟周期数、其中的空转数;,习题6.8,计算机系统结构,15,(4)用WinMIPS64模拟器依次运行原程序、新程序,测试(2)、(3)步的对应结果(最好打印Cycles图);(5)分析模拟过程,你能找出哪些造成测试结果与手工计算结果不一致的原因?,习题6.8(续),计算机系统结构,16,前几大节基本解决了分支程序的控制相关问题,本大节重点讨论循环程序中的数据相关问题。对编译之前的源代码进行识别、优化更容易。6.5.1 挖掘更多的循环级并行本小节重点讨论不同次循环迭代之间的相关。1.循环携带相关定义:不同次循环迭代之间的相关。影响:如果原始程序内存在循环携带相关,则在循环展开后,指令不能在各轮循环之间任意调动,这就大大限制了优化操作的效果发挥。,6.5 开发更多的指令级并行,计算机系统结构,17,for(i=1;i=100;i=i+1)Ai+1=Ai+Ci;/*S1*/Bi+1=Bi+Ai+1;/*S2*/假设数组A、B和C中所有元素的存储地址都互不相同,请问语句S1与S2之间存在哪些数据相关?解:(1)循环迭代内相关:蓝色箭头;(2)循环携带相关:红色箭头。,例6.7(P173),计算机系统结构,18,进一步讨论循环展开的结果(以展开1次为例):for(i=1;i=100;i=i+2)Ai+1=Ai+Ci;/*S1,来自第1个迭代*/Bi+1=Bi+Ai+1;/*S2,来自第1个迭代*/Ai+2=Ai+1+Ci+1;/*S3,来自第2个迭代*/Bi+2=Bi+1+Ai+2;/*S4,来自第2个迭代*/这时如果因为S1、S2相关造成停顿,需要在它们之间插入一条语句的话,插入S3仍有同样的相关,S4则不能调至S3之前。实际上无语句可调。由此例可以看出:循环迭代内相关是局部性限制,不影响指令在大范围内移动;循环携带相关是全局性限制,影响了指令在大范围内移动。所以需要寻找消除循环携带相关的方法。,例6.7解(续),计算机系统结构,19,有一类循环携带相关可以修改为循环内相关,例如for(i=1;i=100;i=i+1)Ai=Ai+Bi;/*S1*/Bi+1=Ci+Di;/*S2*/解:其特征是本轮循环的一条语句与下轮循环的另一条语句相关,这种情况不构成连续的相关链,可以把相关的两条语句重新组合到同一轮循环中A1=A1+B1;for(i=1;i=99;i=i+1)Bi+1=Ci+Di;/*原来的S2*/Ai+1=Ai+1+Bi+1;/*原来的S1*/B101=C100+D100;以后就可以顺利地进行循环展开。相关链分析见下页。,例6.8(P173),计算机系统结构,20,例6.8(续),计算机系统结构,21,显式相关与隐式相关 同一变量名出现在多条语句中是显式相关,可通过字符匹配来识别 同一数组元素以不同的存储别名出现在多条语句中是隐式相关,不能通过简单的字符匹配来识别什么是存储别名 一个元素被不同的地址表达式访问,如 Ai+5、Aj2-6、Ak 由于编译时难以预测索引变量i、j、k将来的运行值,故疑似存储别名一律作相关看待,所在语句之间必须保持足够距离,避免并行执行存储别名判则适用条件数组是仿射的(affine)仿射数组:访问地址表达式均为一次函数,形如Aai+bj+c 非仿射数组:例如ABi,2.存储别名导致的隐式相关(GCD判则),计算机系统结构,22,GCD判则(最大公因数,Greatest Common Divisor)问题给定一维数组Am:n和任意整数j、k(mj,kn),地址表达式 Aaj+b 与 Ack+d 有没有可能是同一个元素,即什么条件下满足aj+b=ck+d判则如果GCD(c,a)可以整除(d-b),可能存在存储别名(疑似相关)如果GCD测试的结果为假(不能整除),一定不存在存储别名判则之所以说“可能存在”,是因为目标程序在运行中,j、k的实际取值范围也可能到不了满足aj+b=ck+d的点。,2.存储别名导致的隐式相关(GCD判则),计算机系统结构,23,例:6j+13与9k+1是否满足GCD判则?解:GCD(c,a)=3,(d-b)=-12,能够整除,可能存在存储别名验证:对取值j=0,1,2,和k=0,1,2,有6j+13=13,19,25,31,37,43,49,55,61,9k+1=1,10,19,28,37,46,55,64,73,显然存在存储别名。将b和d互换后也一样(这时(d-b)=+12)6j+1=1,7,13,19,25,31,37,43,49,9k+13=13,22,31,40,49,58,67,76,85,,GCD判则成功的例子,计算机系统结构,24,例:4j+1与2k+4是否满足GCD判则?解:GCD(c,a)=2,(d-b)=3,不能整除,不存在存储别名验证:对取值j=0,1,2,和k=0,1,2,有4j+1=1,5,9,13,17,21,25,29,33,2k+4=4,6,8,10,12,14,16,18,20,未发现存储别名。将b和d互换后也一样(验证略),GCD判则失败的例子,计算机系统结构,25,例6.9(P175)使用GCD测试方法判断下面的循环中是否存在存储别名。for(i=1;i=100;i=i+1)x2*i+3=x2*i*5.0;解:在这个循环中,a=2,b=3,c=2,d=0,那么GCD(a,c)=2,而d-b=-3。由于2不能整除-3,因此没有存储别名,即无论i取何值,x2*i+3与x2*i都将表示数组x的不同元素。,GCD判则失败的例子,计算机系统结构,26,在使用GCD测试之前,必须先对这段代码进行“规范化”修改下标从1开始(不必要?),而且每次循环后增加1(Hennessy教材3版第4章)。例如学习指导书题6.15原循环代码为for(i=2;i=100;i+=2)ai=a50*i+1;进行规范化后的修改循环代码为for(i=1;i=50;i+)a2*i=a100*i+1;再用GCD测试法,a=2,b=0,c=100,d=1,GCD(c,a)=2,(d-b)=1,(d-b)mod GCD(c,a)0,不能整除,所以该循环不存在循环携带的真数据相关。此题如果不先作规范化,则结论是“存在循环携带相关”。习题6.7(注意学习指导书中对应的题6.6答案是错的),GCD测试之前要求循环代码“规范化”,计算机系统结构,27,?,3.数据相关处理?,计算机系统结构,28,各次作业应交的内容,作业7(第8次课),6.8(改),6.7,

    注意事项

    本文(《计算机系统结构》电子教案(课7).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开