<4D F736F F F696E74202D20B5DAC1F9D5C220D7F7D2B5B2CEBFBCB4F0B0B8>

Similar documents
L21

Microsoft PowerPoint - CA_04 Chapter6 v ppt

<4D F736F F F696E74202D20B5DAC6DFD5C220D6B8C1EEC1F7CBAECFDF2E707074>

<4D F736F F F696E74202D20B5DAC1F9D5C220C0FBD3C3C1F7CBAECFDFCCE1B8DFD0D4C4DC2E707074>

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

Training

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

Chapter 6

Microsoft PowerPoint - chx09_org14_pipelining_1.ppt

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

untitled

单周期数据通路

[Group 9] Give an example of structural hazard ans 1. 假設下列指令是在只有單一記憶體的 datapath 中執行 lw $5, 100($2) add $2, $7, $4 add $4, $2, $5 sw $5, 100($2)

第七章 中断

Chapter 6

<4D F736F F D20B5DAC1F9D5C2CFB0CCE2B4F0B0B8A3A8CDF8D5BEA3A92E646F63>

<4D F736F F D CFC4D7E9B3C9D4ADC0EDCAD4CCE22D41A3A8B4F0B0B8A3A92E646F63>

L23

(Microsoft Word - \300\351\251[\256\321\255\261\263\370\247i0413.doc)

<4D F736F F F696E74202D20B5DAC6DFD5C220D6B8C1EEC1F7CBAECFDF2E707074>

lecture21

Microsoft PowerPoint - chx09_org16_pipelining_3.ppt

Microsoft PowerPoint - CA_02 Chapter5 Part-I_Single _V2.ppt

MIPS 处理器的 SystemC 实现 学号 : 孙伟斌 B 前言 这篇文档讲述了如何使用 SystemC 来实现一个多周期的流水 MIPS 处理器 通过对 MIPS 处理器的五步进行描述, 本文详细阐述了作业中的 SystemC 实现如何来构建者五步流水中的每一

Template

Pipelining Advanced

chx10_arch02_ilp.ppt [兼容模式]

1 CPU

计算机组织与系统结构

Chapter 6

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

PowerPoint 簡報

ex

Microsoft Word - 2.doc

多 种 途 径, 让 学 生 通 过 实 践 性 教 学, 事 半 功 倍 地 接 受 理 解 老 师 讲 授 的 知 识, 教 学 过 程 跟 踪 国 外 金 融 市 场 动 态 与 国 内 外 著 名 专 家 学 者 的 交 流 与 区 域 金 融 机 构 的 交 流, 形 成 探 究 式 教

标题

Microsoft PowerPoint - 《??省企?集体合同?例》解?(?莞).ppt [Compatibility Mode]

来 正 式 组 织 关 系 转 出 后 未 收 到 组 织 关 系 介 绍 信 回 执 的 党 员 排 查 的 主 要 任 务 是, 核 查 党 员 身 份 信 息, 摸 清 流 动 党 员 底 数, 理 顺 党 员 组 织 关 系, 健 全 完 善 党 员 档 案, 对 与 党 组 织 失 去 联

勞動條件檢查執行重點(雲林)_ [相容模式]

醋 水 法 在 水 盆 內 放 入 約 七 分 滿 的 水 與 1/2 到 1 小 杯 的 醋 量, 將 髒 襪 子 浸 泡 一 晚, 隔 天 再 丟 入 洗 衣 機, 就 能 洗 得 相 當 乾 淨 醋 有 殺 菌 除 臭 和 漂 白 功 效, 使 用 過 的 醋 水, 還 可 清 理 地 板,

穨 PDF

第一冊 第四章 分裂與再統一 班級 座號 姓吊

Microsoft Word - 完全手冊-課程.doc

<4D F736F F D D6D0B9FAB5D8D6CAB4F3D1A7BFC6D1D0BEADB7D1D3D0B9D8D6C6B6C82D48442E646F63>

被当作鬼的人.doc

Microsoft PowerPoint - chx08_arch02_ilp.ppt

Microsoft PowerPoint ren-build-CPU [兼容模式]

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

L15 MIPS Assembly

要 及 时 为 入 党 积 极 分 子 确 定 两 名 培 养 联 系 人, 进 行 联 络 帮 助 要 定 期 ( 每 季 度 至 少 一 次 ) 听 取 培 养 联 系 人 的 思 想 和 工 作 情 况 汇 报, 及 时 完 成 入 党 积 极 分 子 登 记 表 ( 见 附 件 2) 的 填

申 请 律 师 执 业 许 可 初 审 服 务 指 南 目 录 一 办 理 要 素 ( 一 ) 事 项 名 称 和 编 码 4 ( 二 ) 实 施 机 构 4 ( 三 ) 申 请 主 体 4 ( 四 ) 受 理 地 点 4 ( 五 ) 办 理 依 据 4 ( 六 ) 办 理 条 件 5 ( 七 )

图 文 聚 焦 国 培 计 划 (2013) 甘 肃 省 农 村 小 学 音 乐 骨 干 教 师 短 期 集 中 培 训 9 月 4 日 开 班 了, 学 员 老 师 们 从 甘 肃 省 各 个 县 市 州 汇 聚 湖 南 一 师, 开 始 了 为 期 14 天 的 培 训 学 习 : 鲜 明 的

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

环 境, 我 在 巩 固 在 校 期 间 所 学 习 的 理 论 知 识 的 同 时, 不 断 的 充 实 己, 利 用 业 余 时 间 主 动 学 习 专 业 知 识, 技 能, 把 理 论 联 系 到 工 作 实 践 中 作 为 一 名 工 作 生 活 中 的 党 员, 我 始 终 注 意 与

附件1

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

<4D F736F F D A67EABD7A4BAB3A1B1B1A8EEA8EEABD7A6DBA6E6B5FBA6F4AD70B5652E646F63>

统计工作情况汇报

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

目 录 第 一 章 地 方 陪 同 导 游 人 员 服 务 程 序...1 第 一 节 地 方 陪 同 导 游 人 员 的 概 念 与 职 责...1 第 二 节 服 务 准 备...2 一 熟 悉 接 待 计 划...2 二 落 实 接 待 事 宜...5 三 物 质 和 知 识 的 准 备...

走 吧, 到 三 峡 去 : 那 里 是 我 们 先 人 用 生 命 之 血 打 造 的 家 园 走 吧, 到 三 峡 去 : 那 里 的 浪 涛 承 载 过 千 百 万 只 我 们 先 人 驶 向 今 天 的 航 船 走 吧, 到 三 峡 去 : 那 里 的 每 一 座 青 山 都 刻 满 了 我

6寸PDF生成工具

Microsoft Word - 送報伕2.doc

Microsoft Word - N011 斷翅天使

中 国 科 学 院 国 家 科 学 图 书 馆

申论写作套路万能模板

( 地 ( ) 组 织 机 构 代 码 企 业 详 细 名 称 哈 密 地 伊 吾 新 疆 广 汇 新 能 源 有 限 公 司 玛 纳 斯 玛 纳 斯 祥 云 化 纤 有 限 公 司 玛 纳 斯 玛 纳 斯 澳 洋 科 技 有 限 责

申請機構基本資料

申請機構基本資料

~2~

,,

untitled

<4D F736F F D20D1A6CBABB0D9D0A1D7E95F3332CEBBC1F7CBAECFDF435055C9E8BCC65F2E646F63>

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

xueshu004.doc

没有幻灯片标题

Microsoft PowerPoint nf1.ppt [唯讀]

计算机组织与系统结构

lecture13

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

计算机组织与系统结构

计算机组织与系统结构

计算机组织与系统结构

计算机组成原理 课程设计报告

201112封面.psd

Microsoft PowerPoint - notes3-Simple-filled12

untitled

台中商銀流程圖

师 资 格 证 书 ( 以 下 简 称 证 书 ) 遗 失 或 损 毁 的, 及 时 办 理 证 书 补 发 换 发 手 续 ; 证 书 信 息 有 误 的, 及 时 办 理 信 息 更 正 手 续, 重 发 证 书 关 于 定 期 注 册 工 作 中 有 关 特 殊 问 题 的 处 理, 我 中

Microsoft Word 第104期.doc

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

2015年土地市场发展报告-网站

Transcription:

第六章利用流水线提高性能 作业参考答案

参考答案 : P.373 中 ALU 操作时间为 200ps a. ALU 操作时间缩短 25% 不能加快流水线指令速度 因为流水线的速度最终由时钟周期的宽度决定, 而它不会缩短时钟周期 b. 如果 ALU 操作时间延长 25%, 那么,ALU 时间将变为 250ps, 这样,ALU 操作将变成瓶颈, 使得流水线的时钟周期为 250ps, 其效率降低 (250-200)/250=20%

参考答案 : a. 一个程序核心模块共 10 6 条指令, 每条指令花 100ps 完成, 则在非流水线处理器上执行的时间为 :100 x10 6 =100us. b. 若在一个 20 级流水线的处理器上执行, 理想情况下, 每个时钟周期为 :100/20=5ps, 所以, 程序执行时间为 5 x10 6 =5us. 快了 100/5=20 倍 c. 流水线并不是理想的, 流水线段之间数据的传递会产生额外的开销 一方面, 这种开销使得一条指令的执行时间被延长, 即影响 Instruction latency 另一方面, 这种开销也拉长了每个流水段的执行时间, 即影响 Instruction throughput

参考答案 : 有三个 RAW 数据冒险, 其中一个是 load-use 数据冒险, 需要 阻塞 一个时钟

参考答案 : 有四个 RAW 数据冒险 (1) 第一条 add 指令和第二条 sub 指令之间 (2) 第一条 add 指令和第三条 lw 指令之间 (3) 第一条 add 指令和第四条 add 指令之间 (4) 第三条 lw 指令和第四条 add 指令之间其中,(1) (2) 和 (3) 是关于寄存器 $3 的数据冒险, 可以通过 转发 解决 (4) 是关于寄存器 $6 的数据冒险, 是 load-use 数据冒险, 不能通过 转发 解决, 将发生一次 阻塞

参考答案 : 图 6.36 是一个带 冒险 检测和 转发 处理的五阶段流水线数据通路 第五个时钟结束时, 各条指令的执行情况如下 : 第一条指令在 WB 阶段, 寄存器 $2 正被写入第二条指令在 MEM 阶段,sub 指令是 NOOP 操作第三条指令在 EXE 阶段,ALU 正在执行 add 操作第四条指令在 ID/REG 阶段, 寄存器 $6 和 $1 正被读出第五条指令在 IF 阶段, 指令正被读出

ID/EX.MemRead and (ID/EX.RegisterRt=IF/ID.RegisterRs or ID/EX.RegisterRt=IF/ID.RegisterRt) C1 P.416 图 6.36 C2 C1: EX/MEM.RegWrite and EX/MEM. RegisterRd 0 and (EX/MEM. RegisterRd=ID/EX. RegisterRs or EX/MEM. RegisterRd=ID/EX. RegisterRt C2: MEM/WB.RegWrite and MEM/WB. RegisterRd 0 and (MEM/WB. RegisterRd=ID/EX. RegisterRs or MEM/WB. RegisterRd=ID/EX. RegisterRt

参考答案 : 第 6.17 题中的 指令序列为 : 第五个时钟中, 各条指令的执行情况如下 : 指令 1 在 WB 阶段, 控制信息等在 MEM/WB.Reg 中指令 2 在 MEM 阶段, 控制信息等在 EX/MEM.Reg 中指令 3 在 EXE 阶段, 控制信息等在 ID/EX.Reg 中指令 4 在 ID/REG 阶段, 指令在 IF/ID.Reg 中指令 5 在 IF 阶段, 指令正被读出 转发 检测条件为 : C1: EX/MEM.RegWrite and EX/MEM. RegisterRd 0 and (EX/MEM. RegisterRd=ID/EX. RegisterRs or EX/MEM. RegisterRd=ID/EX. RegisterRt C2: MEM/WB.RegWrite and MEM/WB. RegisterRd 0 and (MEM/WB. RegisterRd=ID/EX. RegisterRs or MEM/WB. RegisterRd=ID/EX. RegisterRt 根据以上 转发 检测条件, 得到比较结果为 : C1: EX/MEM.RegWrite=1(sub 指令 ) EX/MEM. RegisterRd($4) 0 EX/MEM. RegisterRd ($4) ID/EX. RegisterRs($3) EX/MEM. RegisterRd($4) ID/EX. RegisterRt($5) C2: MEM/WB.RegWrite=1 (add 指令 ) and MEM/WB. RegisterRd ($2) 0 MEM/WB. RegisterRd($2) ID/EX. RegisterRs($3) MEM/WB. RegisterRd($2) ID/EX. RegisterRt($7) 由此可知 :C1 和 C2 都不满足 转发 条件, 所以不需要转发

参考答案 : 第 6.17 题中的 指令序列为 : 第五个时钟中, 各条指令的执行情况如下 : 指令 1 在 WB 阶段, 控制信息等在 MEM/WB.Reg 中指令 2 在 MEM 阶段, 控制信息等在 EX/MEM.Reg 中指令 3 在 EXE 阶段, 控制信息等在 ID/EX.Reg 中指令 4 在 ID/REG 阶段, 指令在 IF/ID.Reg 中 指令 5 在 IF 阶段, 指令正被读出 Hazard ( 冒险 ) 检测条件为 : ID/EX.MemRead and ID/EX.RegisterRt=IF/ID.RegisterRs or ID/EX.RegisterRt=IF/ID.RegisterRt) 根据以上 冒险阻塞 检测条件, 得到比较结果为 : ID/EX.MemRead=0(add 指令 ) ID/EX. RegisterRt($5) IF/ID. RegisterRs ($6) ID/EX. RegisterRt($5) IF/ID. RegisterRt($1) 说明 : 因为当前在 EXE 阶段的指令为 add, 所以目的地址应该为 Rd 而不是 Rt 所以, ID/EX. RegisterRt 为寄存器 $5 而不是 $3! 由此可知 : 不满足 冒险 条件, 所以不需要阻塞

参考答案 : a. 因为 lw 指令和 add 指令之间存在一个 load- use 数据冒险 ( 满足图 6.36 中数据冒险检测条件 ), 所以每个 lw 指令和 add 指令之间要有一次流水线阻塞 而 add 指令和 lw 指令之间的数据冒险满足图 6.36 中的 转发 检测条件, 故可通过数据转发解决冒险 即 : 实际的 CPI 为 1.5 b. 如果没有转发, 则在每条 lw 指令和 add 指令之间将会有两个阻塞, 这样每条指令相当于都要有三个时钟才能完成 即 :CPI 为 3

使用 转发 的情况 : Time (clock cycles) I n s t r. O r d e r add r1,r2,r3 lw r4,0(r1) add r6,r4,r7 lw r8,0(r6) IF ID/RF EX MEM WB ALU Im Reg Dm Reg ALU Im Reg Dm Reg stall Im Reg bubble bubble bubble Im Reg Dm Reg ALU Im Reg ALU Dm 使用 转发 时, 只有 lw 指令后需要一次阻塞!

不使用 转发 的情况 : Time (clock cycles) I n s t r. O r d e r add r1,r2,r3 stall stall lw r4,0(r1) stall stall add r6,r4,r7 IF ID/RF EX MEM WB ALU Im Reg Dm Reg Im bubble bubble bubble bubble Im bubble bubble bubble bubble Im Reg Dm Reg ALU Im bubble bubble bubble Im bubble bubble Im Reg 通过寄存器写口 / 读口分别安排在前半 / 后半周期, 在不使用 转发 时使得每条指令之间只要阻塞两次就可解决!

参考答案 : 从后面的图中可以看出 : 若采用 转发 技术, 则执行这段代码需要 8 个时钟周期若不采用 转发 技术, 则执行这段代码需要 11 个时钟周期

I n s t r. O r d e r lw $4,100($2) sub $6,$4,$3 add $2,$3,$5 Time (clock cycles) IF ID/RF EX MEM WB ALU Im Reg Dm Reg ALU Im Reg Dm Reg Im Reg Dm Reg ALU 寄存器 $4 在第四时钟周期结束时才有值, 但 sub 指令在第四周期开始就要用, 所以必须使 sub 指令延迟一个周期执行!

使用转发时的情况 : I n s t r. lw $4,100($2) Time (clock cycles) IF ID/RF EX MEM WB ALU Im Reg Dm Reg Sub->nop Im Reg bubble bubble bubble O r d e r sub $6,$4,$3 add $2,$3,$5 ALU Im Reg Dm Reg Im Reg Dm Reg ALU 在 EX 阶段内, 通过 冒险 检测, 发现有一个数据冒险存在, 在 EX 阶段结束前进行阻塞, 做 : 1) 使 sub 指令控制信号冲刷为 0,Sub 操作变为 nop 2) 使 IF/ID 流水段中的 Sub 指令不被 add 指令冲掉, 下个周期继续对 sub 指令译码 3) 使当前 PC 不变, 下个周期继续取 add 指令

不使用转发时的情况 : I n s t r. add r1,r2,r3 stall stall Time (clock cycles) IF ID/RF EX MEM WB ALU Im Reg Dm Reg Im bubble bubble bubble bubble Im bubble bubble bubble bubble O r d e r lw r4,0(r1) stall stall add r6,r4,r7 Im Reg Dm Reg ALU Im bubble bubble bubble Im bubble bubble Im Reg 通过寄存器写口 / 读口分别安排在前半 / 后半周期, 在不使用 转发 时使得每条指令之间只要阻塞两次就可解决!

参考答案 : 图 6.36 中 转发 检测条件和控制信号为 : C1: EX/MEM.RegWrite and EX/MEM. RegisterRd 0 and (EX/MEM. RegisterRd=ID/EX. RegisterRs or EX/MEM. RegisterRd=ID/EX. RegisterRt C2: MEM/WB.RegWrite and MEM/WB. RegisterRd 0 and (MEM/WB. RegisterRd=ID/EX. RegisterRs or MEM/WB. RegisterRd=ID/EX. RegisterRt ForwardA (ForwardB) = 01 当 c2=1 时 10 当 c1=1 时 由此可见, 图 6.36 中 转发 单元的输入和输出为 :

参考答案 : 各类指令所用功能部件的时间为 存储器操作变为两个时钟周期后, 其单周期数据通路的时钟周期不变, 为 600ps 而多周期数据通路中, 各类指令的时钟周期变为 : load:7;store:6;alu:5;beq:4;jump:4 以 SPECINT2000 混合指令比例计算,CPI=0.25x7+0.10x6+0.52x5+0.11x4+0.02x4 = 5.47 存储器操作变为两个时钟周期后, 多周期数据通路的时钟周期为 100ps, 故一条指令的执行时间为 100x5.47=547ps 比较结果 : 多周期比单周期快!

参考答案 : 存储器操作变为两个时钟周期后, 其流水线包含了以下 7 个阶段 : instruction1 instruction2 instruction3 instruction4 当第一条指令为 lw 指令时,instruction1-4 的执行情况由咖啡色 ( 不能转发 ) 和红色 ( 可转发 ) 表示 instruction1 需要 2 个 stall ; instruction2 需要 1 个 stall ; 后续指令 3 可以通过 转发 解决 ( 后续指令 4 不是数据冒险 ) 当第一条指令为 ALU 指令时,instruction1-4 的执行情况由兰色表示 说明后续所有的数据冒险都可以通过 转发 解决 ( 后续指令 4 不是数据冒险 )

参考答案 : 根据 P425 中的例子, 已知 : 各主要功能单元的操作时间为 : 存储单元 :200ps ( 被分成 100ps 的两个阶段 ) ALU 和加法器 :100ps 寄存器堆 ( 读 / 写 ):50ps 假设 MUX 控制单元 PC 扩展器和传输线路都没有延迟, 指令组成为 : 25% 取数 10% 存数 52%ALU 11% 分支 2% 跳转则下面实现方式中, 哪个更快? 快多少? (1) 单周期方式 : 每条指令在一个固定长度的时钟周期内完成 (2) 流水线方式 : 取指 1 取指 2 取数/ 译码 执行 存取 1 存取 2 写回七个阶段

对于单周期方式 : 时钟周期将由最长指令来决定, 应该是 load 指令, 为 600ps 所以,N 条指令的执行时间为 600N(ps) 对于流水线方式 : 存储器操作变为两个时钟周期后, 其流水线包含了 7 个阶段. 对于 beq, 若预测正确, 则为 1 个周期, 若预测错误, 则为 3 个周期 ( 与原五段流水线相比, 多一个取指周期, 多阻塞了 1 个周期 ), 故 CPI=1/4x3+3/4x1=1.5 对于 load, 随后第一条则为 3 个 ( 阻塞 2 个 ) 周期 ; 随后第二条则为 2 个 ( 阻塞 1 个 ) 周期, 以后的指令都不需要阻塞, 故 CPI=1/2x3+1/2x1/4x2+3/8x1=2.125 对于 ALU 指令, 随后的数据相关指令都可通过转发解决, 故 CPI=1 对于 Store 指令, 不会发生数据冒险, 故 CPI=1 对于 Jump 指令, 总要等到译码结束才能确定转移地址, 故 CPI=3 平均 CPI 为 :2.125x25%+1x10%+1x52%+1.5x11%+3x2%=1.38 所以, N 条指令的执行时间为 1.38x100xN=138N(ps) 流水线比单周期快 600/138=4.38 倍

参考答案 : 根据 6.6.2 节中所指出的, 将分支比较操作提前到 ID 阶段, 会导致来不及通过转发来解决数据冒险 ( 即 : 若不提前的话, 本可以通过转发解决的 ) 当分支指令依赖于仍在流水段中的结果时, 便来不及通过转发来解决 例如, 以下的例子中, 如果分支比较不提前, 则 add 指令 EXE 阶段执行的结果 ( 在 EX/MEM 流水段寄存器 ) 可以转发给 beq 指令的 EXE 阶段进行比较 ( 红线 ), 但如果 beq 指令在 ID 阶段比较的话, 就来不及转发了 ( 兰线 ) lw $1, 100 ($2) add $1, $1, 8 beq $1, $3, 10 ALU Im Reg Dm Reg ALU Im Reg Dm Reg 在给出的例子中, 第一条指令和第二条指令中还有一个 load-use 数据冒险, 也不能通过转发来消除 所以, 该例中 1-2 之间的 阻塞 和 2-3 之间的 转发 都不可通过转发来消除!

参考答案 : 预测准确率 = 预测正确次数 / 总预测时间 *100% a. B1: R-3, W-0; B2: R-0, W-4; B3: R-3, W-3; B4: R-4, W-1; B5: R-5, W-2;60% b. B1: R-0, W-3; B2: R-4, W-0; B3: R-3, W-3; B4: R-1, W-4; B5: R-2, W-5;40% c. B1: R-3, W-0; B2: R-3, W-1; B3: R-1, W-5; B4: R-3, W-2; B5: R-3, W-4;52% d. B1: R-3, W-0; B2: R-3, W-1; B3: R-3, W-3; B4: R-4, W-1; B5: R-5, W-2;72%

参考答案 : 要使得上述代码段的性能最差, 则只要让代码段中出现 load-use 冒险最多 lw $2, 100($6) add $4, $2, $3 lw $3, 200($7) add $6, $3, $7 sub $8, $4, $6 lw $7, 300($8) beq $7, $8, Loop 这样做有什么问题吗?

参考答案 : 从给定的图可以看出,beq 指令是在 ID 段确定是否转移, 并计算转移地址的 当判断要转移 (taken) 时,ID 段会产生一个 Flush 信号, 使得下一条已被取出的指令 (lw) 被清 0, 并控制将转移地址送 PC, 流水线被阻塞一个时钟后, 从转移地址处开始执行 故不会同时发生 Flush 和 Stall 假定 beq 指令的分支判断和转移地址计算没有提前, 还是在 MEM 阶段时, 则在 MEM 阶段会产生一个 Flush 信号, 此时, 在 ID 阶段同时检测到 load-use 冲突, 并引起一次 stall 因此, 这种情况下,Flush 和 Stall 会同时发生

Figure6.45 on P.461 题意 : 图中 冲突 检测和 分支判断 是否可能同时分别要求进行 阻塞 和 冲刷?

带静态分支预测处理的数据通路 IF.Flush=Br. and Eq. 40# 指令 beq $1,$3, 7 的 ID 阶段 转移目标地址 (72)->PC 控制转移目标地址 ->PC 将 IF/ID 中指令字清 0, 变为 nop 指令

Beq 前面的指令还在流水线中继续执行, 没有任何影响 使指令转到 72 处执行上条错取指令变成了 bubble BACK

带 转发 和 阻塞 检测的流水线数据通路 使控制信号清 0, 阻塞随后指令! 1 ID/EX.MemRead and (ID/EX.RegisterRt=IF/ID.RegisterRs or ID/EX.RegisterRt=IF/ID.RegisterRt) 2 3 使 写使能 信号为 0, 使 PC 和 IF/ID 不变!

Zero 同时检测到 Flush 和 Stall 时, 会产生矛盾, 此时, 必须保证 Flush 的优先级更高! 可以将两个检测电路合在一起, 并加上并行判优电路

循环中, 有 2 个 load-use 冒险和一个控制冒险 (3 次阻塞 ), 所以共有 5 次阻塞, 因而每次循环共需 8+5=13 个周期 这样对吗? 不采用任何预测时, 如是! 采用静态预测 ( 初始预测转移 ) 时, 怎样? 最后 1 次循环需 8+5=13 个周期, 前面各次预测都能成功, 故只需 8+2=10 个周期 不预测时, 优化调度指令顺序后, 消除了 load-use 参考答案 : 优化调度后的代码段为 : 冒险, 有一个控制冒险 (3 次阻塞 ), 因而每次循环共需 8+3=11 个周期 总的操作次数为 400/4=100 次, 循环次数为 100/2=50 次, 所以优化后的程序用 11x50=550 个周期原程序为 13x50=650 个周期所以, 性能提高了 650/550=1.18 倍采用简单静态预测 ( 初始预测转移 ) 时, 性能如何? 最后 1 次需 8+3=11 个周期, 前面各次只需 8 个周期优化后的程序用 11x1+8x49=403 个周期原程序为 13x1+10x49=503 个周期性能各提高了 650/503=1.29,550/403=1.36 优化后提高了 503/403=1.25 倍

参考答案 : 题目给出的一次循环展开代码中循环体有三条指令 (lw,sub 和 sw), 已知循环次数是 2 的倍数, 将循环体展开三次后, 循环结束条件的判断要作相应的调整, 以保证展开后的代码能得到正确的结果 展开为 3 次后, 操作次数可能的情况为 3 6 9 12 15 18, 故对于 4 6 8 10 12 14 16 18 的操作次数来说, 有以下三种可能 : 1) 操作次数是 4 10 16, 按 3 的倍数循环的对应次数为 3 9 15, 少了 1 次 2) 操作次数是 6 12 18, 正好既是 3 的倍数, 又是 2 的倍数, 不多不少 3) 操作次数是 8 14 20, 按 3 的倍数循环的对应次数为 6 12 18, 少了 2 次 所以, 需要在代码中加入操作次数调整部分

循环展开 3 次的代码段如右所示 在循环的开始, 判断是否剩下的循环次数小于 3, 是的话, 转到 leftover 进行结束前处理 ; 否则, 进入循环在循环中, 判断循环次数是否正好是 3 的倍数, 是的话, 则直接跳转到结束 (finish 处 ) 在结束前处理中, 先补充操作一次, 然后判断是否结束, 是的话, 跳转到结束 (finish 处 ); 否则, 再补充操作一次 右边代码段的性能分析如下 : 1) 控制冒险 : 循环内有两条分支指令 bgt bne; 循环外有一条 jump 指令 (1 次阻塞 ) 和一条分支指令 2)load-use 冒险 :1 次或 2 次总操作次数为 400/4=100, 则循环次数为 100/3=33 次, 补充 1 次操作总的周期数为 (12+3+3)x33+1+4+2+3+4=608 比前面两种代码的性能分别提高了 650/608=1.07 倍 550/608=0.90 倍 周期数计算是在无预测的情况下进行的 假定采用简单静态预测方法, 则结果应该不同!

采用静态预测 ( 初始预测转移 ) 时, 性能分析如下 : 总操作次数为 400/4=100, 循环次数为 100/3=33 次, 补充 1 次操作 1) 控制冒险 : bgt 只在最后 1 次转移, 第一次和最后一次预测错误 ; bne 指令每次都发生转移, 无预测错误 ; beq 指令发生转移, 无预测错误 ; jump 指令发生一次阻塞 2)load-use 冒险 :1 次或 2 次总的周期数为 : (12+3)x1+12x32+1+4+2+3+1=410 采用静态预测后, 性能提高了 608/410=1.48 倍 比前面两种代码的性能分别提高了 503/410=1.22 倍 403/410=0.98 倍本题说明了是否优化调度 循环展开次数如何选择 是否采用预测等方面对程序性能的影响 你的结论是什么? 优化调度能消除循环内大量 load-use 冒险, 性能约提高 20%; 循环展开次数选择不当会影响性能, 降低 2%-10%; 采用预测会大大提高性能, 约提高 30%-59%

参考答案 : 将代码段中的循环展开四次, 放在一个 2 发射 MIPS 流水线中执行时, 可以按以下方式进行调度 ALU 或 Branch lw 或 sw Loop: addi $20, $10, 0 lw $2, 0($10) lw $5, 4($10) sub $4, $2, $3 lw $7, 8($10) sub $6, $5, $3 lw $9, 12($10) sub $8, $7, $3 sw $4, 0($10) sub $11, $9, $3 sw $6, 4($10) 用重命名机制避免了寄存器 $10 在最后两行中的名字依赖关系 name Dependence( 或反依赖关系 antidependence, 不是真实依赖 ) 用 $20 替换了 $10 这种超标量方式下, 其性能又如何呢? addi $10, $10, 16 sw $8, 8($20) bne $10, $30, loop sw $11, 12($20)