一台 Load-Store 架构的计算机工作在 800 MHz。某基准程序的指令混合与各类指令的 CPI 如下表。
| 指令类别 | 出现频率 | CPI |
|---|---|---|
| Integer ALU | 50 % | 1 |
| Load | 20 % | 3 |
| Store | 10 % | 3 |
| Branch | 15 % | 2 |
| Floating-Point | 5 % | 16 |
求平均 CPI 与 MIPS rating。已知该程序运行 0.25 秒,求执行的浮点指令条数。
每秒 800×10⁶ 个周期,每条指令平均吃 2.5 个周期:
针对 A1 的同一台机器和同一个基准程序,新编译器可以消除 50% 的 Integer ALU 指令和 20% 的 Floating-Point 指令,但会让 Load、Store、Branch 各增加 20%。
求优化后的平均 CPI 与 MIPS rating,以及新编译器带来的加速比。对结果作出评论。
| 类别 | 原条数 | 新条数 | CPI | 新周期 |
|---|---|---|---|---|
| Integer ALU | 50 | 25 | 1 | 25 |
| Load | 20 | 24 | 3 | 72 |
| Store | 10 | 12 | 3 | 36 |
| Branch | 15 | 18 | 2 | 36 |
| Floating-Point | 5 | 4 | 16 | 64 |
| 合计 | 100 | 83 | — | 233 |
原周期数 = 100 × 2.5 = 250(与 A1 一致,可作验算)。
CPI 从 2.5 升到 2.807,MIPS rating 从 320 降到 285,但程序实际快了 7.3%。
原因是编译器删掉的恰恰是最便宜的 ALU 指令(CPI = 1),剩下的指令里「贵指令」占比变高,平均 CPI 自然上升;但指令总数从 100 降到 83,总周期数从 250 降到 233,真正的工作量减少了。
CPU 时间 = IC × CPI ÷ f —— IC 掉 17%,CPI 涨 12%,净效果是时间降到 93.2%。这句评论通常值 2–3 分。在 A2 的优化代码基础上,换装一个新的浮点单元,可以显著降低浮点指令的 CPI,且不影响时钟频率和其它功能。
用 Amdahl 定律求可能达到的最大总加速比。写明你的假设。
A2 的优化代码共 233 个周期,其中浮点占 4 × 16 = 64 个:
某 CPU 有 50% 的时间花在分支指令上。加装分支预测后,预测正确时一条分支快 4 倍,预测错误时慢 2 倍。
设原总时间 = 1,准确率 = a。快 4 倍 ⇒ 时间 × 1/4;慢 2 倍 ⇒ 时间 × 2。
加速比 1.25 ⇒ T′ = 1 ÷ 1.25 = 0.8:
令加速比 = 1,即 T′ = 1:
低于此值,预测器反而让机器变慢——因为猜错的惩罚(2 倍)比猜对的奖励(1/4)更重。
这就是 Amdahl 天花板:剩下那 50% 的非分支时间纹丝不动。
| 准确率 | 50% | 57.1% | 70% | 80% | 90% | 100% |
|---|---|---|---|---|---|---|
| 加速比 | 0.941 | 1.000 | 1.127 | 1.250 | 1.404 | 1.600 |
某流水线 CPU 有如下特性:
程序 Q 在每条除法之后都紧跟 1 条使用除法结果的指令和至少 3 条无关指令。求该 CPU 运行 Q 时 CPI 的最紧上界。
「其它指令 4 个周期」是干扰项——规则 4 保证每周期能发射一条,没有任何指令在等它们的结果,所以这个 4 从头到尾用不上。唯一会造成停顿的是规则 3。
| 指令 | 开始周期 | 依据 |
|---|---|---|
| 浮点除法 | 0 | 起点 |
| 使用结果的指令 | 24 | 规则 3:必须等除法完成 |
| 无关指令 ① | 25 | 比前一条晚 1 周期 |
| 无关指令 ② | 26 | 同上 |
| 无关指令 ③ | 27 | 同上 |
| 下一条除法 | 28 | 新一轮开始 |
自由度一(无关指令条数 k):一轮周期 = 25 + k,指令数 = k + 2,CPI = (25+k)/(k+2)。k = 3 时 5.6;k = 4 时 4.83;k = 5 时 4.29——单调递减,k = 3 最坏。
自由度二(排列顺序):若把 3 条无关指令排在使用结果的指令之前,它们就被塞进了 24 周期的空洞里:除法 0,无关 1、2、3,使用结果 24,下一条除法 25 ⇒ CPI = 25/5 = 5.0。比 5.6 小。
所以 5.6 是取遍所有合法情况的最大值,且该排法合法、可达 ⇒ 既是上界又可达 ⇒ 最紧。
CPI ≤ (L + k + 1) / (k + 2)。本题 L = 24、k = 3 ⇒ 28/5。一块磁盘转速 10000 RPM,寻道时间 5 ms,传输率 100 MB/s。
每个文件都要重新寻道 + 等旋转,然后才传输:
只需要一次寻道和旋转,之后连续传完:
一块视频采集卡以恒定 163,840,000 bit/s 产生数据。每个数据块先经一次 DMA 从采集卡传入主存缓冲区,再经一次 DMA 从缓冲区传到 SSD。DMA 块大小 4096 字节。CPU 主频 200 MHz,每次 DMA 传输需要 800 个周期设置、传输结束后再用 400 个周期处理中断。
题干说得很明白:每块要两次(采集卡→主存,主存→SSD):
DMA 的意义是搬运本身不用 CPU 管,但两头的手续还得 CPU 做:
一条同步总线工作在 200 MHz,数据通路 64 位。每次事务用 1 个周期送地址,随后每个周期传一个数据字。
原因:地址那一个周期是固定开销,它被摊薄在数据周期上。块越大摊得越薄(8 个数据字时开销只占 1/9),块越小占比越高。这就是为什么现代总线和 cache 都用「成块传输」。
此时总线两端对「现在是第几个周期」的理解完全不一致,同步协议直接失效。
一个存储阵列有 4 块磁盘,每块的传输率 150 MB/s,平均访问延迟 10 ms。
4 块盘同时工作,每块只需读 300 ÷ 4 = 75 MB:
若全部放在单块盘上:
注意加速比是 3.94 而不是 4——那 10 ms 的延迟没有被分摊掉。
因为 99.7% 的时间花在那一块盘的机械寻道和旋转上,其它三块盘帮不上任何忙——一个 4 KB 的块没法被切成四份分给四块盘去找。