文档介绍:该【计算机系统结构》电子教案(1) 】是由【相惜】上传分享,文档一共【28】页,该文档可以免费在线阅读,需要了解更多关于【计算机系统结构》电子教案(1) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。第6章指令级并行软件方法〔指令级,多发射或乱序执行,静态调度〕本章学****由软件〔即编译程序〕实现的指令级并行方法,主要内容是如何修改、优化已编译完的目标程序,以减少指令间冲突造成的停顿,缩短程序执行时间。〔以下图a〕来讨论本节〔本章〕的整数、浮点数混合运算程序,实际上解释不通,我们改用以下图b的整数、浮点别离的流水线结构来讨论。第6章采用的流水线模型整数ALU浮点ALU(b)实际可用的流水线结构整数、浮点共用ALU(a)〔P71〕(3) (4)(1) (2)(1):相关指令之间采用定向技术〔包括前、后半周期定向〕,以减少停顿;在ID段处理分支指令,分支停顿为1个时钟周期;采用延迟分支技术,设1个延迟槽。(2)相关浮点指令之间的停顿:浮点数在“执行〞段需4拍,其它段为1拍。两条相关的浮点指令之间的最少停顿周期数如下表〔〕 根本原理是按两条相关指令之间所需的最小启动距离将它们隔开,在二者之间安排其它的无关指令,减少直至消除流水线停顿。〔P154〕:将如下C语言源程序编译成MIPS目标代码,然后使用指令调度技术、延迟分支技术优化其代码性能〔指缩短运行时间〕。for(i=1000;i>0;i--)x[i]=x[i]+s;解:(1)初步编译结果如下Loop:,0(R1)//F0←,F0,F2//F4←F0+F2〔即标量s〕,0(R1)//F4存回向量元素DADDIUR1,R1,#-8//R1←R1-8〔指向前1个元素,长浮点〕BNER1,R2,Loop//假设R1≠R2,:代码性能:每轮循环完成1个浮点元素运算,需10拍,其中5拍是空转。:模拟结果比分析结果多1拍的原因在于模拟器的流水线存在“结构冲突〞。(2)调度、延迟分支后的相关链分析():代码性能:每轮循环完成1个浮点元素运算,需6拍,其中1拍是空转。模拟软件Cycles图:,刚刚的例子中每个浮点元素运算中使用3条有效指令,附加2条循环控制指令,辅助操作占了太高的比例。 循环展开的目的一是降低辅助操作的比例,二是通过合并来增加每个循环体中的指令条数,使指令调度有更大的调整范围,优化效果更好。〔P155〕:,然后使用指令调度技术、延迟分支技术优化其代码性能。假设原循环次数是4的整倍数。解:先讨论几个本卷须知。如果各轮循环之间不存在相关,展开后可以简单并行,否那么需处理;如果原循环次数N=展开倍数M×K〔K是整数〕,那么新的循环次数K=N/M,否那么要在循环结束之后增加补偿代码来完成剩余的操作;原来多轮循环重复使用的存放器,合并之后必须通过重命名来区分,否那么发生名相关,限制并行性;原来各轮循环中的循环控制指令,合并后可以减少。(1)展开后没有调度的程序如下Loop:,0(R1);F0←x[i]〔取数〕,F0,F2;F4←F0+,0(R1);x[i]←F4〔存结果〕,-8(R1);F6←x[i-1]〔取数〕,F6,F2;F8←F6+,-8(R1);x[i-1]←F8〔存结果〕,-16(R1);F10←x[i-2]〔取数〕,F10,F2;F12←F10+,-16(R1);x[i-2]←F12〔存结果〕,-24(R1);F14←x[i-3]〔取数〕,F14,F2;F16←F14+,-24(R1);x[i-3]←F16〔存结果〕DADDIUR1,R1,#-32;R1←R1-4×8〔指针前移4个数〕BNER1,R2,Loop;假设R1≠R2,〔P155〕〔未完,接下页〕:〔续1〕