4.1.2相关性对指令级并行的影响 本章使用的浮点流水线的延迟 产生结果指令使用结果指令延迟时钟周期 数 浮点计算 另外的浮点计 浮点计算 浮点数据存操 作(SD) 浮点数据取操 作(LD) 浮点计算 浮点数据取操浮点数据存操 作(LD) 作(SD)
6 4.1.2 相关性对指令级并行的影响 本章使用的浮点流水线的延迟 产生结果指令 使用结果指令 延迟时钟周期 数 浮点计算 另外的浮点计 算 3 浮点计算 浮点数据存操 作(SD) 2 浮点数据取操 作(LD) 浮点计算 1 浮点数据取操 作(LD) 浮点数据存操 作(SD) 0
例4-1 对于下面的源代码, for(i=1;i<=100;i++) xli] xLi] +s (Ⅰ)转换成DLX汇编语言,在不进行指令调度和进 行指令调度两种情况下,分析代码一次循环的执行 时间。 (Ⅱ)编译过程进行分析,来仔细考察换名的过程。 备注:本章使用的浮点流水线的延迟如上表所示
7 例4-1 对于下面的源代码, for (i=1; i<=1000; i++) x[i] = x[i] + s; (Ⅰ)转换成DLX汇编语言,在不进行指令调度和进 行指令调度两种情况下,分析代码一次循环的执行 时间。 (Ⅱ)编译过程进行分析,来仔细考察换名的过程。 备注:本章使用的浮点流水线的延迟如上表所示
解:(I (1)变量分配寄存器 整数寄存器R1:循环计数器,初值为向量 中最高端地址元素的地址。 浮点寄存器F2:保存常数S。 假定最低端元素的地址为8。 (2)DLX汇编语言后的程序 Loop: LD F0, O(R1) ADDD F4 F0 F2 SD0(R1),F4 SUBI R1. R1.#8 BNEZ R1, Loop
8 解: (Ⅰ) (1) 变量分配寄存器 整数寄存器R1:循环计数器,初值为向量 中最高端地址元素的地址。 浮点寄存器F2:保存常数S。 假定最低端元素的地址为8。 (2) DLX汇编语言后的程序 Loop: LD F0,0(R1) ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,#8 BNEZ R1,Loop
(3)程序执行的实际时钟 ◆根据上表中给出的的延迟,实际时钟如下: 指令流出时钟 Loop: LD FO, O(RD) (空转) ADDD F4 FO. F2 (空转) (空转) SD0(R1),F4 (空转) 23456789 SUBI RIRI.#8 7 BNEZ RI, Loop (空转) ◆每个元素的操作需要10个时钟周期,其中5个 是空转周期
9 (3) 程序执行的实际时钟 根据上表中给出的的延迟,实际时钟如下: 指令流出时钟 Loop: LD F0 , 0(R1) 1 (空转) 2 ADDD F4 , F0 , F2 3 (空转) 4 (空转) 5 SD 0(R1) , F4 6 SUBI R1 , R1 , #8 7 (空转) 8 BNEZ R1 , Loop 9 (空转) 10 每个元素的操作需要10个时钟周期,其中5个 是空转周期
(4)指令调度以后,程序的执行情况 ◆SD放在分支指令的分支延迟槽中 ◆对存储器地址偏移量进行调整 指令流出时钟 Loop LD FO, O(RD SUBⅠR1.R1.#8 ADDD F4 FO. F2 (空转) BNEZ RI, Loop SD8(R1),F4 ◆一个元素的操作时间从10个时钟周期减少到6个 5个周期是有指令执行的,1个空转周期
10 (4) 指令调度以后,程序的执行情况 SD放在分支指令的分支延迟槽中 对存储器地址偏移量进行调整 指令流出时钟 Loop: LD F0 , 0(R1) 1 SUBI R1 , R1 , #8 2 ADDD F4 , F0 , F2 3 (空转) 4 BNEZ R1 , Loop 5 SD 8(R1) , F4 6 一个元素的操作时间从10个时钟周期减少到6个 5个周期是有指令执行的,1个空转周期