一共27个时钟周期,平均每次循环使用27/4~67个 周期。 循环展开+指令调度(循环展开调度) (1) LOOP. LDF0,0(R1) 2) LDF6,-8(R1) (3) LDF10,-16(R1) (4) LDF14-24(R1) (5) ADDD F4 F0 F2 (6) ADDD F8.F6F2 ADDD F12F10F2 (8) ADDD F16F14F2
一共 27 个时钟周期,平均每次循环使用27/46.7个 周期。 循环展开+指令调度(循环展开调度): (1) LOOP: LD F0,0(R1) (2) LD F6,-8(R1) (3) LD F10,-16(R1) (4) LD F14,-24(R1) (5) ADDD F4,F0,F2 (6) ADDD F8,F6,F2 (7) ADDD F12,F10,F2 (8) ADDD F16,F14,F2
(9) sD0(R1),F4 (10) SD-8(R1),F8 (11) SD-16(R1)F12 (12) SUBI RIRI#32 (13) BNEZ RILOOP 4 SD8(R1),F16 一共14个时钟周期,平均每次循环使用14/4≈3.5个 周期。所有“空转”消失,即数据相关和控制相关被消 除,达到完全指令级并行。 结论:由编译器所完成的循环展开和指令调度(静态调 度),能有效提高指令级并行
(9) SD 0(R1),F4 (10) SD -8(R1),F8 (11) SD -16(R1),F12 (12) SUBI R1,R1,#32 (13) BNEZ R1,LOOP (14) SD 8(R1),F16 一共 14 个时钟周期,平均每次循环使用14/43.5个 周期。所有“空转”消失,即数据相关和控制相关被消 除,达到完全指令级并行。 结论:由编译器所完成的循环展开和指令调度(静态调 度),能有效提高指令级并行
算循环展开+指令调度要注意这几方面何题: (1)正确性(主要是循环控制和操作数偏移量修改) 佛2有效性主要是不同循环次之间的无关性 (避免冲 条(4尽可能减少循环控制中的测试和分支 (5)注意对存储器数据的相关性分析 (6)注意新的相关性 狗 关键:要分析清指令之间存在怎样的相关性以及在这种 相关性下指令应该如何被修改和调度
循环展开+指令调度要注意这几方面问题: (1)正确性(主要是循环控制和操作数偏移量修改) (2)有效性(主要是不同循环次之间的无关性) (3)使用不同的寄存器(避免冲突) (4)尽可能减少循环控制中的测试和分支 (5)注意对存储器数据的相关性分析 (6)注意新的相关性 关键:要分析清指令之间存在怎样的相关性以及在这种 相关性下指令应该如何被修改和调度
412相关性 相关性指的是一条指令的运行如何依赖于另一条指令的 运行。 研究相关性,不但可作为是否可指令调度的依据,而且 可了解程序固有的并行性以及可以获得的并行性 狗相关 意味指令的运行、结果产生的顺序有要求, 意味指令的并行运行和改变顺序可能会产生问题 不意味指令的流水线运行一定会产生停顿
4.1.2 相关性 相关性指的是一条指令的运行如何依赖于另一条指令的 运行。 研究相关性,不但可作为是否可指令调度的依据,而且 可了解程序固有的并行性以及可以获得的并行性。 相关 意味指令的运行、结果产生的顺序有要求, 意味指令的并行运行和改变顺序可能会产生问题, 不意味指令的流水线运行一定会产生停顿
篑 相美粪里 数据相关( data dependence) 体名相关( name dependence) 控制相关( control dependence) 1.数据相关 2)指剞与指令k数据相关,指令k与指令徵据相 关(传递性)
相关类型 数据相关(data dependence) 名相关(name dependence) 控制相关(control dependence) 1. 数据相关 对指令i和j,如果 (1)指令j使用指令i产生的结果,或 (2)指令j与指令k数据相关,指令k与指令i数据相 关(传递性)