第四章流水线技术 指令级并行的概念 4.2指令的动态调度 4.3转移预测技术 4.4多发射技术 4.5向指令级并行的支持与限制 4.6 Inte pent i um4实例分析
1 第四章 流水线技术 4.1 指令级并行的概念 4.2 指令的动态调度 4.3 转移预测技术 4.4 多发射技术 4.5 向指令级并行的支持与限制 4.6 Intel Pentium 4 实例分析
4.1指令级并行的概念 指令级并行的概念 几乎所有的处理机都利用流水线来使指令重叠并行执行,以 达到提高性能的目的。这种指令之间存在的潜在并行性称为指 令级并行。(ILP: Instruction- Level parallelism
2 4.1 指令级并行的概念 指令级并行的概念 几乎所有的处理机都利用流水线来使指令重叠并行执行,以 达到提高性能的目的。这种指令之间存在的潜在并行性称为指 令级并行。 (ILP:Instruction-Level Parallelism)
4.1.1指令级并行 1、流水线处理机的实际CP 理想流水线的CP加上各类停顿的时钟周期数: CPI流水线=CPI理想+停顿结构冲突+停顿数据 冲突+停顿控制冲突 理想CP是衡量流水线最高性能的一个指标 IPC: Instruct ions Per Cycle (每个时钟周期完成的指令条数) 2、基本程序块 基本程序块:一段除了入口和出口以外不包含其 他分支的线性代码段。 程序平均每5~7条指令就会有一个分支
3 4.1.1 指令级并行 1、流水线处理机的实际CPI – 理想流水线的CPI加上各类停顿的时钟周期数: CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据 冲突 + 停顿控制冲突 – 理想CPI是衡量流水线最高性能的一个指标。 – IPC:Instructions Per Cycle ⚫ (每个时钟周期完成的指令条数) 2、基本程序块 – 基本程序块:一段除了入口和出口以外不包含其 他分支的线性代码段。 – 程序平均每5~7条指令就会有一个分支
3、循环级并行:使一个循环中的不同循环体并 行执行。 开发循环体中存在的并行性 最常见、最基本 是指令级并行研究的重点之 例如,考虑下述语句 for(i=1;i<=500;ⅰ=i+1) ali]=ali]+s 每一次循环都可以与其他的循环重叠并行执行; 在每一次循环的内部,却没有任何的并行性
4 3、循环级并行:使一个循环中的不同循环体并 行执行。 – 开发循环体中存在的并行性 ⚫ 最常见、最基本 – 是指令级并行研究的重点之一 – 例如,考虑下述语句: for (i=1; i<=500; i=i+1) a[i]=a[i]+s; ⚫ 每一次循环都可以与其他的循环重叠并行执行; ⚫ 在每一次循环的内部,却没有任何的并行性
4、最基本的开发循环级并行的技术 循环展开(| oop unroll l ing)技术 采用向量指令和向量数据表示
5 4、最基本的开发循环级并行的技术 – 循环展开(loop unrolling)技术 – 采用向量指令和向量数据表示
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个空转周期