再考察例4-1,假设循环展开时,循环控制分支指令没有去除, 则指令序列如下所示: LD F0,0(R1) ADD D F4.F0.F2 SD 0(R1),F4 SUBI R1,R1,#8 BOZ RI EXit D FO, O(RI) DD F4.F0.F2 0(R1),F4 ADD D F4.F0.F2 SUBI RI RI.#8 SD 0(R1),F4 BEQZ RI,Exit SUBI R1. R1.#8 LDF0,0(R1) BENZ ReMit LD F0,0(R1) ADD. d F4. FO F2 SD 0(R1),F4 SUBI RIRI#8 BEZ R1, Loop Exit
16 再考察例4-1,假设循环展开时,循环控制分支指令没有去除, 则指令序列如下所示: loop: LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 BEQZ R1 , Exit LD F0 , 0(R1) DD F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 BEQZ R1 , Exit LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 BEQZ R1 , Exit LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 BNEZ R1 , Loop Exit:
由于上述指令段中 BEQZ R1,Exit, BEQZ R1,Exit,BEQZ R1,Exit三条分支指令的存在,引起控制相关,导致其后的4 条指令不能跨越分支指令进行调度,即不同循环遍次里的指令 不能够跨越循环遍次进行调度
17 由于上述指令段中BEQZ R1 , Exit,BEQZ R1 , Exit,BEQZ R1 , Exit三条分支指令的存在,引起控制相关,导致其后的4 条指令不能跨越分支指令进行调度,即不同循环遍次里的指令 不能够跨越循环遍次进行调度
4.1.3支持指令级并行的基本编译技术 1.检测并提高循环级并行 2.循环展开技术 3.全局指令调度
18 4.1.3支持指令级并行的基本编译技术 1.检测并提高循环级并行 2.循环展开技术 3.全局指令调度
1.检测并提高循环级并行 循环级并行是指在源代码或靠近源代码的层次进行并行分 析,而指令级并行则是对经过编译技术产生的指令进行并行分 析。 循环级并行分析集中分析某一个循环体中的数据存取是 否涉及前一个循环体中的数据。这种相关叫做体间相关
19 1.检测并提高循环级并行 循环级并行是指在源代码或靠近源代码的层次进行并行分 析,而指令级并行则是对经过编译技术产生的指令进行并行分 析。 循环级并行分析集中分析某一个循环体中的数据存取是 否涉及前一个循环体中的数据。这种相关叫做体间相关
看下面的程序: for(1=10001>0;=1+1) x]=x[]+s; 在这个循环程序中,用到了两次x[订,它们之间即存在数据相 关,但这是循环体內的相关而不是体间相关。在相邻的两次对i 的引用上,存在体间相关,但这种相关包含规约变量,很容易 只别和消除
20 在这个循环程序中,用到了两次x[i],它们之间即存在数据相 关,但这是循环体内的相关而不是体间相关。在相邻的两次对i 的引用上,存在体间相关,但这种相关包含规约变量,很容易 识别和消除。 看下面的程序: for (i=1000;i>0;i=i+1) x[i]=x[i]+s;