问答题
指令流水线分为4个段,取指(F)段、译码并读寄存器(D)段、执行(E,包括读写存储器、定点加减运算和逻辑运算)段和写回寄存器(W)段。E段有内部数据定向传送,结果生成即可使用。
现有C语言代码如下:
A=B+C
D=E+F
针对某RISC机器的编译方案有如下两种:
方案一,未采用指令调度
I1:LDA Rb ,memB ‘LDA为取数指令,将B所在内存单元的内容送入Rb寄存器
I2:LDA Rc,menC ‘意义同上
I3:Add Ra,Rb,Rc ‘寄存器Rb和Rc的内容相加,结果保存至Ra寄存器
I4:STA memA,Ra ‘STA为送数指令,将Ra的内容送入A所在内存单元
I5:LDA Re ,memE ‘以下指令含义与上相同,省略
I6:LDA Rf,menF
I7:Add Rd,Re,Rf
I8:STA memD,Rd
方案二,采用了指令调度
I1:LDA Rb ,memB
I2:LDA Rc,menC
I3:LDA Re ,memE
I4:Add Ra,Rb,Rc
I5:LDA Rf,menF
I6:STA memA,Ra
I7:Add Rd,Re,Rf
I8:STA memD,Rd
(1)试采用时空图分析方案一和方案二的执行周期数分别为多少?如果流水线周期为100ns,指令吞吐率分别为多少。
(2)试说明,你是如何理解编译器的“指令调度”的优化原理的。
【参考答案】