L23

Similar documents
<4D F736F F F696E74202D20B5DAC6DFD5C220D6B8C1EEC1F7CBAECFDF2E707074>

<4D F736F F F696E74202D20B5DAC1F9D5C220D7F7D2B5B2CEBFBCB4F0B0B8>

<4D F736F F F696E74202D20B5DAC1F9D5C220C0FBD3C3C1F7CBAECFDFCCE1B8DFD0D4C4DC2E707074>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

计算机组织与系统结构

chx10_arch02_ilp.ppt [兼容模式]

<4D F736F F F696E74202D DB5DABEC5BDB22DCEA2B4A6C0EDC6F7B5C4D3B2BCFEBDE1B9B9A3A8D2BBA3A92E >

<4D F736F F F696E74202D20B5DAC6DFD5C220D6B8C1EEC1F7CBAECFDF2E707074>

Microsoft PowerPoint - chx08_arch02_ilp.ppt

第五章 重叠、流水和现代处理器技术

Pipelining Advanced

Microsoft PowerPoint - chx09_org16_pipelining_3.ppt

Training

计算机组成与系统结构

Microsoft PowerPoint - CHX05_arch04_tomasulo.ppt

L15 MIPS Assembly

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

Microsoft PowerPoint - chx09_org14_pipelining_1.ppt

lecture21

计算机组织与系统结构

L21

The MIPS Processor Implementation: Pipeline ILP Computer Organization & Design John Hennessy, David Patterson

1 CPU

¸ß¼¶¼ÆËã»úÌåϵ½á¹¹

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

没有幻灯片标题

µÚ¶þÕ µ¥´¦ÀíÆ÷Ìåϵ½á¹¹

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

没有幻灯片标题

投影片 1

Name__________________________________

<4D F736F F D CFC4D7E9B3C9D4ADC0EDCAD4CCE22D41A3A8B4F0B0B8A3A92E646F63>

PowerPoint 演示文稿

计组复习提纲

<4D F736F F D20B5DAC1F9D5C2CFB0CCE2B4F0B0B8A3A8CDF8D5BEA3A92E646F63>

计算机组织与系统结构

计算机组织与系统结构

计算机组织与系统结构

Microsoft Word - 第2章 ARM体系结构.doc

第七章 中断

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

chx10_arch03_OoOIssue.ppt [兼容模式]

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

没有幻灯片标题


没有幻灯片标题

Ps22Pdf

游戏攻略大全(五十二).doc

游戏攻略大全(五十一).doc

¨Æ·~½g¡ã¾·~¤ÀÃþ

% 25% (i) 95% 96,290,900 (ii) 99.9% 17,196,000 (iii) 99.9% 89,663,100 2

Microsoft Word - om388-rnt _excl Items 16 & 38_ _final_for uploading_.doc

國立中山大學學位論文典藏.PDF

Microsoft Word mpc-min-chi.doc

( ) 1

穨cwht.PDF

900502_Oasis.indb

bnb.PDF

untitled

Microsoft Word _4

郑州大学(下).doc

厨房小知识(六)

广 东 纺 织 职 业 技 术 学 院 发 展 党 员 公 示 制 实 施 办 法 关 于 推 荐 优 秀 团 员 作 为 党 的 发 展 对 象 工 作 的 意 见 后 勤 管 理 工 作 广 东 纺 织 职 业 技 术 学 院 新 引 进 教 职 工 周 转 房 管 理


游戏攻略大全(五十).doc

金融英语证书考试大纲


健康知识(二)

中南财经大学(二).doc

广西大学(一).doc

根据学校教学工作安排,2011年9月19日正式开课,也是我校迁址蓬莱的第一学期开学

山东大学(一).doc

2

主 编 : 杨 林 副 主 编 : 张 新 民 邹 兰 曹 纯 纯 周 秋 婷 李 雅 清 黄 囡 囡 评 审 顾 问 : 杨 林 张 新 民 评 审 : 张 新 民 邹 兰 曹 纯 纯 周 秋 婷 李 雅 清 黄 囡 囡 李 忆 萍 徐 如 雪 文 字 编 辑 : 曹 纯 纯 邹 兰 李 雅 清

最新文物管理执法全书(十四).doc

园林常识(二).doc

前 言 二 一 六 年 四 月 四 日, 兒 童 節, 誕 生 了 一 件 美 事 : 中 國 作 家 曹 文 軒 在 意 大 利 博 洛 尼 亞 國 際 童 書 展 榮 獲 國 際 安 徒 生 文 學 獎, 是 該 獎 創 設 六 十 年 來, 第 一 位 摘 桂 的 中 國 作 家, 意 義 重

湖 南 科 技 大 学

上海外国语大学(二).doc

2009 陳 敦 德

切 实 加 强 职 业 院 校 学 生 实 践 能 力 和 职 业 技 能 的 培 养 周 济 在 职 业 教 育 实 训 基 地 建 设 工 作 会 议 上 的 讲 话 深 化 教 育 教 学 改 革 推 进 体 制 机 制 创 新 全 面 提 高 高 等 职 业 教 育 质 量 在

鸽子(三)

兽药基础知识(四)

园林植物卷(十).doc

园林植物卷(十七).doc

临床手术应用(三)

家装知识(二十)

医疗知识小百科

家庭万事通(一)

家装知识(三)

园林绿化(一)

园林植物卷(十五).doc

最新监察执法全书(一百五十).doc

兽药基础知识(三)

奥运档案(四).doc

最新监察执法全书(五十).doc

最新执法工作手册(三百八十四)

中华美食大全4

动物杂谈_二_.doc

抗非典英雄赞歌(三)

Transcription:

Lecture 26: VLIW & Superscalar

高级流水线技术 高性能流水线 - 指令级并行 (ILP) 技术 超流水线 多发射流水线 - 静态多发射 (VLIW 处理器 + 编译器静态调度 ) - 动态多发射 ( 超标量处理器 + 动态流水线调度 ) 静态多发射 (VLIW- 超长指令字 ) 编译器静态推测完成 指令打包 和 冒险处理 MIPS 2- 发射流水线数据通路 循环展开指令调度 IA-64 的 EPIC 技术 动态多发射 动态多发射流水线的通用模型 动态多发射流水线的执行模式 - 按序发射 按序完成按序完成 - 按序发射 无序完成 - 无序发射 无序完成无序完成 Pentium 4 动态多发射流水线 - 超流水 超标量超标量 动态调度动态调度 无序发射无序发射 无序完成无序完成

提高性能措施 实现指令级并行 流水线实现了指令流内部的并行, 这种并行称为指令级并行 (ILP) 有两种指令级并行策略 超流水线 (Super- pipelining) - 级数更多的流水线 CPI=? CPI=1 - 理想情况下, 流水线的加速比与流水段的数目成正比 ( 即 : 理想情况下, 流水段越多, 时钟周期越短, 指令吞吐率越高 ) 但是, 它是有极限的! 可以怎样突破极限呢? 多发射流水线 (Multiple issue pipelining ) - 多条指令 ( 如整数运算 浮点运算浮点运算 装入 / 存储等 ) 同时启动并独立运行 - 前提 : 有多个执行部件 如 : 定点 浮点浮点 乘 / 除 取数 / 存数部件等 - 结果 : 能达到小于 1 的 CPI, 定义 CPI 的倒数为 IPC ( 例如 : 四路多发射流水线的理想 IPC 为 4) - 需要实现以下两个主要任务 指令打包 : 分析每个周期发射多少条? 哪些指令可以同时发射? 冒险处理 : 由编译器静态调整指令或在运行时由硬件处理 - 实现上述两个主要任务的基础 推测技术 - 两种实现方法 静态多发射 : 由编译器在编译时静态完成指令打包或冒险处理 动态多发射 : 由硬件在执行时动态完成指令打包或冒险处理

实现多发射技术的基础 推测 推测技术 : 由编译器或处理器猜测指令执行结果, 并以此来调整指令执行顺序, 使指令的执行能达到最大可能的并行 指令打包的决策依赖于 推测 的结果 - 可根据指令间的相关性来进行推测 与前面指令不相关的指令可以提前执行 - 可对分支指令进行推测 可提前执行分支目标处的指令 - 预测仅是 猜测, 有可能推测错误, 故需有推测错误检测和回滚机制 - 推测错误时, 会增加额外开销 有 软件推测 和 硬件推测 两种 - 软件推测 : 编译器通过推测来静态重排指令 ( 一定要正确!) - 硬件推测 : 处理器在运行时通过推测来动态调度指令 BACK

静态多发射处理器 由编译器在编译时, 进行相关性分析和静态分支预测, 以静态完成 指令打包 或 冒险处理 指令打包 ( 将同时发射的多条指令合并到一个长指令中 ) - 将一个周期内发射的多个指令看成一条多个操作的长指令, 称为一个 发射包 - 静态多发射 最初被称为 超长指令字 (VLIW-Very Long Instruction Word), 采用这种技术的处理器被称为 VLIW 处理器 - 在同一个周期内发射的指令类型是受限制的 ( 例如, 只能是一条 ALU 指令 / 分支指令 一条 Load/Store 指令 ) - IA-64 采用这种方法,Intel 称其为 EPIC(Explicitly Parallel Instruction Computer 显式并行指令计算机 ) 冒险处理 ( 主要是数据冒险和控制冒险 ) - 做法 1: 完全由编译器通过代码调度和插入 nop 指令来消除所有冒险, 无需硬件实现冒险检测和流水线阻塞 - 做法 2: 由编译器通过静态分支预测和代码调度来消除同时发射指令间内部依赖, 由硬件检测数据冒险并进行流水线阻塞即 : 保证打包指令内部不会出现冒险!

静态多发射处理器实例 实例 :MIPS ISA 指令集的静态多发射 ----2 发射处理器 要使原来的 MIPS 处理器能够同时处理两条流水线, 数据通路需要做哪些改进? 1. 同时要能取并译码两条指令, 怎么办? 将两条指令打包成 64 位长指令, 前面为 ALU/Branch, 后面为 lw/sw 没有配对指令时, 就用 nop 指令代替 将 64 位长指令中的两个操作码同时送到控制器 ( 指令译码器 ) 进行译码 2. 两条指令同时要读两个寄存器或写寄存器 ( 和 lw 配对时 ), 怎么办? 增加两个读口和一个写口 3. 两条指令同时要使用 ALU 进行运算, 怎么办? BACK 增加一个 ALU( 包括 2 组输入总线和 1 组输出总线 )

2 发射流水线数据通路 ( 蓝色是增加部分 ) 需增加额外加法器或 ALU ALU/ 分支指令进行 ALU 运算时, Load/Store 指令要计算地址 指令成对放在 64 位对齐内存区域, 前面是 ALU/ 分支指令 如果不能成对, 则用 nop 指令代替缺失指令, 每次取两条指令, 同时对两条指令译码同时需为 ALU 和 lw/sw 指令读两个寄存器, 同时需为 ALU 运算和 Load 结果写一个寄存器 控制器和控制信号会要求数据通路怎样改呢? 流水段寄存器要增宽, 控制信号分别传送

2 发射流水线的特点 优点 : 潜在性能将提高大约 2 倍 ( 实际上达不到! 为什么? ) 缺点 : 为消除结构冒险, 需增加额外部件 增加潜在的由数据冒险和控制冒险导致的性能损失 - 例 1: 对于 Load-use 数据冒险 单发射流水线 : 只有一条指令延迟 2 发射流水线 : 有一个周期 (2 条指令 ) 延迟 - 例 2: 对于 ALU-Load/Store 数据冒险 单发射流水线 : 可用 转发 技术使 ALU 结果直接转发到 Load/Store 指令的 EXE 阶段 2 发射流水线 : 两条指令同时进行,ALU 的结果不能直接转发, 因而不能提供给与其配对的 Load/Store 指令使用, 只能延迟一个周期为了更有效地利用多发射处理器的并行性, 必须有更强大的编译器, 能够充分消除指令间的依赖关系, 使指令序列达到最大的并行性!

例 :2 发射 MIPS 指令调度 以下是一段循环代码段 Loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, Loop ( 能看出这段程序的功能吗?) 循环内进行的是数组访问! 为了能在 2 发射 MIPS 流水线中有效执行, 该怎样重新排列指令 调度方案如下 : 没有指令配对时, 用 nop 指令代替 前三条和后两条各具有相关性可把第四条指令调到第一条后面 sw 指令是否有问题? 怎么办? $s1 减 4, 故 sw 指令偏移改为 4 能否把 addi 和 lw 配成一对? 冒险! 对同一个寄存器同时读, 且读后要写, 取决于寄存器如何设计 一个循环内, 五条指令在四个时钟内完成, 实际 CPI 为 0.8, 即 : IPC=1.25 在循环中访问数组的更好的调度技术是 循环展开

用 循环展开 技术进行指令调度 基本思想 : 展开循环体, 生成多个副本, 在展开的指令中统筹调度 上例采用 循环展开 后的指令序列是什么? 为简化起见, 假定循环执行次数是 4 的倍数 循环展开 4 次后循环内每条指令 (lw, addu, sw, 与数组访问相关 ) 有 4 条再加上 1 条 addi 和 1 条 bne, 共 14 条指令 指令最佳调度序列如下 : 为何第一条指令将 $s1 减 16? 与 $t0 关联的指令偏移为何不同 关联的指令偏移为何不同? 14 条指令用了 8 个时钟,CPI 达到 8/14=0.57 好处 : 充分利用并行需要用到 重命名寄存器 技术, 多用了三个临时寄存器 $t1,$t2,$t3, 消除了名字依赖关系 ( 非真实依赖, 只是寄存器名相同而已 ) 代价是什么? 多用了三个临时寄存器, 并增加了代码大小 ( 存储空间变大 ) 多用了三个临时寄存器 并增加了代码大小 充分利用并行, 并消除部分循环分支! 存储空间变大

实例 :Intel IA-64 架构 IA-64 类似于 64 位 MIPS 架构, 是 Register-Register 型的 RISC 风格指令集 但有独特性 : 要求编译器显式地给出指令级的并行性,Intel 称其为 EPIC Explicitly Parallel Instruction Computer 显式并行指令计算机 与 MIPS-64 架构的区别 更多寄存器 :128 个整数 128 个浮点数 8 个专用分支 64 个 1 位谓词 支持寄存器窗口重叠技术 同时发射的指令组织在指令包 (bundle) 中 引入特殊的谓词化技术, 以支持推测执行和消除分支, 提高指令级并行度 EPIC 的实现技术 指令组 (Instruction Group): 相互间没有寄存器级数据依赖的指令序列 - 指令组长度任意, 用 停止标记 在指令组之间明显标识 - 指令组内部的所有指令可并行执行, 只要有足够硬件且无内存操作依赖 指令包 : 同时发射的指令重新编码并形成指令包 14+3x7+6=41 - 长度为 128, 由 5 位长的模板字段 三个 41 位长的指令组成 - 模板字段对应于以下五类功能部件中的三条指令 整数 ALU 非整数 ALU( 移位和多媒体 ) 访存访存 浮点浮点 分支 谓词化 : 将指令的执行与谓词相关联, 而不是与分支指令关联 IA-64 是?- 发射流水线? 3- 发射流水线! BACK

RISC 的通用寄存器 RISC 机采用大量寄存器 其目的 : 减少程序访问存储器的次数 RISC 机寄存器的组织方式有两种 : 重叠寄存器窗口技术 ORW( 硬件方法 ) - 执行过程调用和返回时, 利用寄存器组而不是存储器来完成参数传递 - 通过重叠窗口技术, 使得不再需要保存和恢复寄存器内容 - 可大大提高了程序执行的速度 优化寄存器分配技术 ( 软件方法 ) - 规定一套寄存器分配算法 - 通过编译程序的优化处理来充分利用寄存器资源 - 编译器为那些在一定的时间内使用最多的变量分配寄存器 BACK

重叠寄存器窗口技术 (Overlapped Register Window ) 寄存器分为两类 : 全局寄存器 : 所有过程共享窗口寄存器 : 用于过程调用 与被调用子过程的输入寄存器重叠 用于保存局部数据 与调用自己的父过程的输出寄存器重叠 A 调用 B 时, 由于各自使用不同的局部寄存器, 所以不需保存现场 A 过程的输出寄存器可直接把参数送给 B 从 B 返回时,B 将返回结果送到其输入寄存器,A 可直接得到 B 返回的结果 BACK

动态多发射处理器 由硬件在执行时动态完成指令打包或冒险处理 通常被称为超标量处理器 (Superscalar) 在一个周期内执行一条以上指令 与 VLIW 处理器的不同点 : VLIW 处理器 : 编译结果与机器结构密切相关, 结构有差异的机器上要重新编译 超标量处理器 : 编译器仅进行指令顺序调整, 但不进行指令打包, 由硬件根据机器的结构来决定一个周期发射哪几条指令 因此, 编译后的代码能够被不同结构的机器正确执行 多数超标量处理器都结合动态流水线调度 (Dynamic pipeline scheduling) 技术 通过指令相关性检测和动态分支预测等手段, 投机性地不按指令顺序执行, 当发生流水线阻塞时, 可以到后面找指令来执行 举例说明动态流水线调度技术 : 左边指令序列中, 哪条指令可以提前执行? sub 指令可以提前执行, 不需等 lw 和 addu 指令执行完如果不将 sub 调到前面, 可能要等很长时间 (lw 指令的访存操作耗时较长!), 从而影响 slti 指令的执行最佳的方案是什么?

动态流水线调度的通用模型 动态流水线的一个重要的思想 : 在等待解决阻塞时, 到后面找指令提前执行! 动态流水线的通用模型 : 一个指令预取和译码单元 : 有序发射 多个并列执行的功能单元 : 乱序执行 一个提交单元 : 有序提交 每个功能单元有各自的保留站用于保存操作数和操作命令 功能单元一旦完成, 则将结果同时送其他等待该结果的保留站和提交单元 提交单元缓存所有完成的指令结果, 直到该结果能安全写回到寄存器或存储器, 称为 Reorder Buffer 指令的结果也可在 Reorder Buffer 中被 转发

功能单元的性能 功能 : 用来执行特定类型的操作 性能 : 每个功能单元具有基本的操作性能, 用两个周期数来刻画 执行周期 (Latency): 完成特定操作所花的周期数 发射时间 (Issue Time): 连续 独立操作之间的最短周期数以下是 Pentium III 算术功能部件的性能 从上述图中看出, 哪些功能部件是流水化的? 哪些是非流水化的? 整数加 整数乘整数乘 浮点加浮点加 装入装入 存储这五种部件是流水化的 浮点乘部件是部分流水化 整数除和浮点除是完全没有流水化 CPU 设计的一个原则 : 有限的芯片空间应该在各功能部件之间进行平衡! 尽量让大多数资源用于最关键的操作 ( 对大量基准程序进行评估 ) 从上述图中能否看出 : 哪些是最重要的操作? 哪些是不常用的? 整数加法和乘法 浮点数加法和乘法是重要的操作除法相对来说不太常用, 而且本身难以实现流水线

动态流水线的几种执行模式 根据动态流水线指令发射和完成顺序, 可分为三种执行模式 : 按序发射按序完成 (Pentium) 最保守的方案是顺序完成, 好处 : 按序发射无序完成 (Pentium II 和 Pentium III) (1) 简化异常检测和异常处理 无序发射无序完成 (Pentium 4) (2) 能在被推测指令完成前得知推测写回条件 : 与前面的所结果的正确性 ReOrder Buffer 重排序缓冲 : 有指令结果不相关 并用于保存已完成的指令结果, 预测正确等待在可能时在可能时写回寄存器堆 保留站 : 存放操作数和操作命令 SKIP 指令发射时, 其操作数可能在寄存器堆或 ROB 中, 可立即复制到保留站中, 故源操作数寄存器可被覆盖 若操作数不在寄存器堆或 ROB 中, 则一定在某个时刻被一个功能单元计算出来, 硬件将定位该功能单元, 并将结果从旁路寄存器复制到保留站

按序发射按序完成 举例 :2 发射超标量, 分为取指 (F) 译码 (D) 执行 (E) 写回 (W) F D W 段在一个时钟周期内完成 ( 可同时有两条指令在这三个阶段 );E 段有三个执行部件 :Load/Store 部件完成数据 Cache 访问需要 1 个时钟, 整数 ALU 完成简单 ALU 操作需 2 个时钟, 整数乘法器完成乘法运算需要 3 个时钟 执行部件采用流水化方式 按序发射按序完成的过程如下 : i1 lw $1, A i2 add $2, $2, $1 i3 add $3, $3, $4 i4 mul $4, $5, $4 i5 lw $6, B i6 mul $6, $6, $7 译码段 执行段写回段时钟 i1 i2 2 i3 i5 i1 i2 间 RAW; i5 i6 间 RAW 和 WAW, 需阻塞一个时钟周期, 并须按序完成! 为按序完成, 虽 i5 在时钟 6 已完成, 但一直推迟到 i4 写回后才写回 i5 i2 i1 i4 i2 i1 i6 i6 指令被阻塞在 译码器 中 i2 i3 i4 i5 i3 i4 i2 [i5] i4 i6 i3 [i5] i6 i4 i6 i5 L/S ALU Mul i6 如果还有一条乘法指令, 则最多可有三条乘法指令同时在执行 3 4 5 6 7 8 9 10

按序发射无序完成 举例 :2 发射超标量, 分为取指 (F) 译码 (D) 执行 (E) 写回 (W) F D W 段在一个时钟周期内完成 ( 可同时有两条指令在这三个阶段 );E 段有三个执行部件 :Load/Store 部件完成数据 Cache 访问需要 1 个时钟, 整数 ALU 完成简单 ALU 操作只需 2 个时钟, 整数乘法器完成乘法运算需要 3 个时钟 执行部件采用流水化方式 按序发射无序完成的过程如下 : i1 lw $1, A i2 add $2, $2, $1 i3 add $3, $3, $4 i4 mul $4, $5, $4 i5 lw $6, B i6 mul $6, $6, $7 译码段执行段写回段时钟 i1 i2 2 i2 i1 i3 i4 i2 i1 i5 i6 i6 无序完成时, 因为 i5 在时钟 6 已完成, 和 i3 i4 没有相关性, 可以不需要等 i3 i4 写回后再写回, 故可先于 i4 完成 i2 i3 i4 i5 i3 i4 i2 [i5] i4 i6 i3 i5 [i5] i6 i4 i6 L/S ALU Mul i6 BACK 3 4 5 6 7 8 9 10

无序发射无序完成 举例 :2 发射超标量, 分为取指 (F) 译码 (D) 执行 (E) 写回 (W) F D W 段在一个时钟周期内完成 ( 可同时有两条指令在这三个阶段 );E 段有三 个执行部件 :Load/Store 部件完成数据 Cache 访问需要 1 个时钟, 整数 ALU 完成简 单 ALU 操作只需 2 个时钟, 整数乘法器完成乘法运算需要 3 个时钟 执行部件采用 流水化方式 无序发射无序完成的过程如下 : 取指和译码按顺序进行, 发射前进行相关性检测, 无关指令可先行发射和先行完成! i1 lw $1, A 例如 :i4 在 i3 前面发射! i2 add $2, $2, $1 i3 add $3, $3, $4 i4 mul $4, $5, $4 i5 lw $6, B i6 mul $6, $6, $7 无序发射的超标量中, 译码后的指令被存放在一个 指令窗口 的缓冲器中, 等待发射. 当所需功能部件可用 且无冲突或无相关性阻碍指令执行时, 就从指令窗口发射, 与取指和译码的顺序无关 译码段执行段 写回段 时钟 i1 i2 2 i3 i4 i5 i6 i7 i8 i1 i2 i4 i1 i5 i2 i3 i4 i3 i4 i6 i2 i5 L/S 只要保证 i1 和 i2 i5 和 i6 之间的发射和完成顺序即可! i6 i3 i4 i6 i6 ALU Mul BACK 3 4 5 6 7 8 9 10

动态流水线调度的必要性 编译器可以依据数据依赖关系来调度代码, 为什么还要超标量处理器来动态调度? 并不是所有阻塞都能事先确定, 动态调度可在阻塞时, 提前执行无关指令 - 例如,Cache 缺失是不可预见的阻塞 动态分支预测需要根据执行的真实情况进行预测 采用动态调度使得硬件将处理器细节屏蔽起来 ( 不同处理器的发射宽度 流水线延时等可能不同, 流水线的结构也会影响循环展开的深度 通过动态调度使得处理器细节被屏蔽起来, 软件发行商无需针对同一指令集的不同处理器发行相应的编译器, 并且, 以前的代码也可在新的处理器上运行, 无需重新编译 ) 理解程序的性能 : 高性能微处理器并不能持续进行多条指令的发射, 原因有 : (1) 指令间的高度依赖关系限制了指令之间的并行执行, 特别是隐含依赖关系的存在 例如, 使用指针的代码段, 存在隐含依赖 (2) 分支指令预测错误 (3) 内存访问引起的阻塞 (Cache 缺失 缺页等缺页等 ) 使得流水线难以满负荷运转

回顾 :Pentium 4 处理器的芯片布局 前端总线及其接口 L1 数据 cache L2 cache 高级动态执行定点运算器 超级流水线技术 Trace cache (L1 指令 cache) 浮点运算器 MMX

回顾 :Pentium 4 处理器的逻辑结构 BTB1 静态预测从 L2 的何处预取指令 前端总线 64 位, 时钟频率 指令预取部件指令译码器 分支预测器 BTB1 简单指令直接译码成 BTB2 动态预测 1~4 条微操作 ; 复杂指 从 trace cache 令从微码 ROM 中取 的何处取微操作 总线接口部件 微码 ROM 执行跟踪 cache (12000 微操作 ) 分支预测器 BTB2 预取控制逻辑 微操作队列 微操作队列 整数寄存器组 浮点寄存器组 L2 cache (48GB/s) 慢 ALU 复杂指令 2xALU 简单指令 2xALU 简单指令 2xAGU 存地址 2xAGU 取地址 浮点存浮点取 浮点加浮点乘浮点除 SSE/ SSE2 MMX 256 位, 时钟频率 L1 数据 cache(8kb)

Pentium 4 的超标量结构运算器 整数寄存器组 浮点寄存器组 慢 ALU 复杂指令 2xALU 简单指令 2xALU 简单指令 2xAGU 存地址 2xAGU 取地址 浮点存浮点取 浮点加 减 乘 除等运算 SSE SSE2 SSE3 MMX L1 数据 cache(8kb) 采用超标量 (superscalar) 结构, 一共包含 9 个运算部件, 可同时工作, 所花时钟不同 2 个高速整数 ALU( 每个时钟周期进行 2 次操作 ), 用于完成简单的整数运算 ( 如加 减法 ) 1 个慢速整数 ALU( 需要多个时钟周期才能完成 1 次操作 ), 用于完成整数乘 除法运算 2 个地址生成部件 (AGU), 用于计算操作数的有效地址, 所生成的地址分别用于从内存取操作数或向内存保存操作结果 1 个运算部件用于完成浮点操作数地址的计算 1 个运算部件用于完成浮点加法 乘法和除法运算 1 个运算部件用于执行流式的 SIMD 处理 (SSE/SSE2/SSE3 指令 ) 1 个运算部件用于完成多媒体信号处理 (MMX 指令 ) 在运算部件中执行的是微操作, 而不是指令! 运算器中的操作采用流水方式!

回顾 :Pentium 4 的用户可见寄存器组 整数寄存器组在 Pentium4 内部, 整数和浮点数各有 128 个物理寄存器 P4 Pentium 80386 80486 8086 8088 寄存器换名操作 : 将用户可见的逻辑寄存器换成内部的物理寄存器寄存器换名时, 要确定是真实依赖还是名字依赖 ( 反依赖 ) 名字依赖时可用不同的物理寄存器替换相同的逻辑寄存器 指令计数器标志寄存器 浮点寄存器组

Pentium4 流水线结构部分 每个 MOP 相当于一条 RISC 指令但其格式没有公开 ROB 各项中记录对应 MOP 的资源分配状态整数 / 浮点队列和存储队列各自有调度器, 用于检测相关性, 无序发射 指令译码结果是对应的若干条微操作 MOP TraceCache 存放指令对应的微操作序列, 一条分支微操作序列称为一个踪迹 ( trace), ),TC 中有多条 trace, 动态预测将哪条 trace 送 MOP 队列 (126 项 ROB) 分配资源 ( 内部寄存器 缓冲器 ) 并重命名后将 MOP 分别送两个不同队列 Pentium 4 是 CISC 壳 RISC 核 结构从 TC 中取 MOP 开始, 进入 MOP 的 20 级超标量超流水线

Pentium 4 的指令译码 对指令功能进行分解 指令译码逻辑 : 功能 : 将指令转换为一组基本操作, 称为微操作 MOP 输入 : 程序中的指令 输出 : 微操作 ( 简单计算任务 ) 例 1:addl %eax, %edx 的译码结果为什么? 一个 加法 操作 ( 对应一个微操作 MOP) 例 2:addl %eax, 4 (%edx) 的译码结果呢? 四个简单操作 ( 对应四个微操作 MOP): 地址计算 :Reg[%edx]+4->addr 装入 :Mem[addr]->Reg[Rtemp] 加法 :Reg[Rtemp]+Reg[%eax]->Reg[Rtemp] 存数 :Reg[Rtemp]->Mem[addr] 一个微操作相当于一条 RISC 指令, 译码生成的微操作序列被存放到 Trace Cache 中

Pentium4 的 20 级超流水线 (Hyper-pipeline) 整数运算微操作流水线为 20 级, 浮点为 29 级 ( 执行阶段的长度不同 ) 两个 drive 段用于芯片内传输信号的驱动, 使其保证长距离传输 沿一个踪迹顺序取 MOP, 直到遇到一条转移 MOP, 通过 BTB2 预测下个踪迹开始点, 继续取 MOP 送 ROB/Alloc/Ren 部件 预测目标处 MOP 不在时, 要通知指令预取器, 快从 L2 中取指令并译码 一个周期 3 条 MOP 送 ROB ROB 有 126 项, 记录每个 MOP 及分配的资源和执行状态, 根据资源分配情况进行寄存器重命名后, 分别送两个 MOP 队列中进行排队 每个队列按 FIFO 将 MOP 送到各自的调度器, 在调度器中进行数据相关性检测, 当所有源操作都就绪时, 将 MOP 发射到对应的执行部件 是 无序 发射 被发射的 MOP 开始读取物理寄存器中的源操作数, 或从旁路由 L1- D Cache 读取 在不同的执行部件中执行 每个部件执行时间长短不同 建立标志信息 ZF/CF 等, 并将执行结果写入物理寄存器 对 BTB2 中预测是否正确进行确认及相应处理

本讲小结 有以下两种指令级并行 (ILP) 技术 ( 即 : 高性能流水线形式 ) 超流水线 : 更多的流水线级数 多发射流水线 : 同时发射多个指令, 有多条流水线同时进行 - 静态多发射 (VLIW 处理器 + 编译器静态调度 ) - 动态多发射 ( 超标量处理器 + 动态流水线调度 ) 静态多发射 (VLIW( 超长指令字 ) 处理器 ) 由编译器静态推测来完成 指令打包 和 冒险处理 MIPS 2- 发射 Datapath 中有 2 个执行部件, 将 2 条指令打包, 并同时译码执行 采用循环展开进行指令调度, 能得到很好的性能 IA-64 采用 VLIW 级数,Intel 特称其为 EPIC 技术,3 条指令打包 动态多发射 ( 超标量处理器 ) 指令执行时由硬件动态推测, 多个执行部件, 同时发射多个指令到执行部件 3 种动态多发射流水线的执行模式 - 按序发射按序完成 按序发射无序完成按序发射无序完成 无序发射无序完成无序发射无序完成 Pentium 4 动态多发射流水线 ( 无序发射 无序完成无序完成 ) - 简单指令由硬件译码器 + 复杂指令由微操作 ROM 产生 MOP - 指令对应的 MOP 存放在 trace cache 中, 按一条条 trace 存放 ( 同一条指令对应的若干微操作可能存放在不同的 trace 中 ) - 20 级以上超流水线 3 发射超标量 2 个队列动态调度 126 条微操作同时执行 - 指令静态预测 + 微操作动态预测