简介《计算机体系结构量化分析第六版》课后答案以PDF形式提供面向学习计算机体系结构、硬件设计与成本效益分析的高校学生及备考读者帮助对照教材完成第一章案例与习题复盘。压缩包仅含1个PDF文件大小约3.73MB内容为英文解答版便于在电脑或平板上直接查阅。已有3609人学习下载具备一定参考热度。答案围绕芯片制造成本、良品率与利润模型展开包含Phoenix与Red Dragon晶圆产量、缺陷率及盈利计算并延伸到多核良品率、芯片面积与成本关系、电压频率对能耗和功率的影响、多核部分使用时的功耗以及Amdahl定律与加速比练习。读者可据此核对计算过程、理解公式来源并补充课堂学习中容易忽略的推导细节。1. 良品率不是一道算术题它决定了你手上那颗芯片为什么长这样翻体系结构教材课后答案的人多半会把第一章那道算良品率的题一眼扫过去套公式、按计算器、对数字三分钟收工。但那条 $ (1D\cdot A)^{-14} $ 的曲线其实是整个半导体经济学被压缩进去的一张底牌。同一片晶圆上芯片面积翻一倍能卖的好 die 不是掉一半而是掉到原来的三分之一都不到这个非线性直接解释了厂商为什么宁可把八颗核心拆成两条四核产品线也不肯做一颗巨无霸芯片。搞懂它你再看计算机体系结构里那些核心数、缓存容量、bank 数量、频率的默认值就不再是拍脑袋的数字而是一组被成本、功耗、时序三条曲线共同夹出来的解。这套量化分析真正的门槛从来不是会不会代公式而是知道曲线为什么长这样、拐点在哪个参数上。2. 芯片成本为什么面积翻倍时良品率会指数级塌方2.1 每片晶圆能切多少颗DPW 的几何与那个 √2先解决一个看起来最没技术含量的量一片晶圆上到底能放多少颗 die。直觉做法是晶圆面积除以芯片面积但圆里塞方块必然会浪费边缘所以工程上用的经验式多了一个修正项$$ \text{DPW} \frac{\pi (d/2)^2}{S} - \frac{\pi d}{\sqrt{2S}} $$其中 $d$ 是晶圆直径$S$ 是单颗芯片面积两者单位必须一致比如 cm 与 cm²。第一项是理想面积比第二项是边缘损耗——把圆周边上那一圈切不出完整方片的区域扣掉等效于沿圆周挖掉一圈宽度约 $ \sqrt{S/2} $ 的环带。把题目里的数代进去看得更清楚。直径取 45、芯片面积取 2 cm²第一项$ \pi \times 22.5^2 / 2 1590 / 2 795 $第二项$ \pi \times 45 / \sqrt{4} 141.37 / 2 70.7 $DPW 795 − 70.7 ≈ 724换成一顆面积 1.2 cm² 的小芯片第一项$ 1590 / 1.2 1325 $第二项$ 141.37 / \sqrt{2.4} 141.37 / 1.549 91.25 $DPW 1325 − 91.25 ≈ 1234这里藏着一个容易被略过的规律边缘损耗的占比随面积缩小而下降。面积 2 cm² 时损耗占 8.9%面积 1.2 cm² 时只占 6.9%。也就是说小芯片在晶圆利用率上白捡了一层红利加上良品率的红利两层叠加才形成后面那个反直觉的结果。很多人在这一步直接拿面积比反推 die 数在大芯片上误差能到 10%往下算利润就全歪了。提示DPW 只算切得下多少颗不算有多少颗是好的。这两件事必须分开算混在一起是后面所有错误的源头。2.2 良品率公式指数 14 到底在惩罚什么题目里用的良品率模型是$$ Y \frac{1}{(1 D \cdot A)^{14}} $$$D$ 是单位面积缺陷密度题目取 0.04/cm²$A$ 是芯片面积$D\cdot A$ 的物理意义是平均每颗芯片上摊到几个缺陷点。指数 14 不是随便写的它刻画的是缺陷的空间聚集程度缺陷越倾向于成团出现现实中灰尘、光刻瑕疵确实成团曲线就对面积越敏感。这个公式的杀伤力在导数里。对面积求弹性$$ \frac{d\ln Y}{d\ln A} -14 \cdot \frac{D A}{1 D A} $$面积 2 cm²、$D0.04$ 时$DA 0.08$弹性约为 $-1.04$面积再涨到 4 cm²$DA0.16$弹性变成 $-1.93$。意思是面积翻倍带来的良品率损失会不断加速不是匀速掉血而是越掉越快。把这个式子代进两组真实数字芯片面积$D\cdot A$良品率DPW好 die 数Phoenix2.0 cm²0.080.340724246Red Dragon1.2 cm²0.0480.5191234640面积只差了 1.67 倍好 die 数量差了 2.6 倍。这就是那条曲线真正在干的事它把做大芯片这个动作的成本放大了一倍以上还给了一个非常平滑、不可谈判的数学理由。常见的实现思路里工业界还会用负二项、Murphy、Seeds 等不同形式的良品率模型它们的曲线形状不同但共享同一个性质——都是面积的凸函数。只要这个凸性成立拆小就永远比做大划算这一点不随具体模型变化。2.3 Phoenix 与 Red Dragon同一道产线上的两种赌注把良品率和单价放在一起矛盾就出来了。Phoenix 单价 30Red Dragon 单价 15小芯片单价只有一半直觉上应该做大芯片赚钱。算一遍每片晶圆的收入Phoenix246 颗好 die × 30 7384.8Red Dragon640 颗好 die × 15 9601.7小芯片每片晶圆反而多赚 30%。这就是这道题最值得记住的结论在良品率主导的成本结构里单价高不等于利润高die 面积才是第一变量。价格只是标价好 die 数才是产能。再看产能分配。假设两个订单分别要 25000 颗 Phoenix 和 50000 颗 Red Dragon按 DPW 折算需要 34.5 片和 40.5 片合计 75 片若产线一周只排得下 70 片解答给出的分配是 40 片给 Red Dragon、30 片给 Phoenix。方向很清楚每片晶圆上 Red Dragon 贡献的收入更高产能紧的时候优先喂给它。我一般会这么理解这类题——它不是算术题是单位稀缺资源产出最大化的线性规划雏形只不过系数是良品率算出来的。这还没完。多核时代把这道题抬到了新高度。单颗核心无缺陷的良品率可以算得很漂亮核心面积 0.25 cm²$D\cdot A 0.01$$Y 1.01^{-14} \approx 0.87$看起来有 87% 的把握。但一颗 8 核芯片要求八颗核心同时无缺陷二项分布给出$$ P(\text{8 核全好}) 0.87^8 \approx 0.328 $$单核 87%八核只剩 33%。这是整个多核设计里最反直觉的一条算术良品率不是按核心数线性摊薄而是按指数摊薄。继续往下列要求概率8 核全好0.328至少 7 核好0.720至少 6 核好0.925从8 全好放宽到至少 7 好可用芯片比例从 33% 跳到 72%翻了一倍多。这就是为什么真实产品线会做屏蔽坏核的降级型号——解答里对 Phoenix4 / Phoenix2 / Phoenix1 的分级本质就是在问同一个问题我肯让几颗坏核搭着卖。放宽一颗收益巨大放宽到两颗以下边际收益迅速趋零因为再往下的概率本身就掉进了万分之一量级开一条产品线的成本盖不住。这条放宽到哪一层最划算的曲线和良品率曲线是同一个凸性在起作用。3. 功耗电压是平方项频率只是一次项3.1 能量、功率、时间三个被混着用的量功耗题翻车最集中的地方不是公式记错是把能量和功率当成一个东西。先把定义钉死功率 $P$瞬时的消耗速率单位 W能量 $E P \times T$完成一件事总共付出多少单位 J动态功率 $P_{\text{dyn}} \alpha C V^2 f$其中 $\alpha$ 是开关活动因子从这两个式子能直接读出关键结论单次操作的能量正比于 $C V^2$与频率无关功率正比于 $C V^2 f$。降频省的是功率不是能量跑得慢、跑得久总账一样降压省的既是功率又是能量而且是平方级地省。题目里那组数字正好把这层差别摆开操作能量变化功率变化只把运行时间压到 1/81/8不变电压降到 1/8约 1.6%约 0.2%电压降 1/2、频率降 1/825%3.13%电压降到 1/8能量掉到 1.6%功率掉到 0.2%——同一个动作在两个指标上差了一个数量级。这不是笔误是 $V^2$ 和 $V^2 f$ 两个因子叠出来的结果。3.2 电压和频率不是对称的两个旋钮既然降压这么划算为什么不一直降因为电压不是独立变量。数字电路要区分 0 和 1靠的是电压摆幅对噪声容限的压制阈值电压 $V_{th}$ 卡在那里$V_{dd}$ 降到接近 $V_{th}$ 时开关比崩塌、漏电飙升、延迟爆炸。工程上通常把频率和电压绑成一对做 DVFS频率大致随 $(V - V_{th})^2 / V$ 走降频才有空间降压降压才能兑现那平方的收益。这也解释了一个常被问的问题为什么不能靠提频一直把单核做快。提频要提压提压是平方级地烧功率而散热能力是有物理上限的。所谓频率墙本质是这条平方项撞上了封装和风冷的边界。血泪经验是凡是看到频率提升 X%就顺手按线性推功耗的估算基本都会低估一半以上。3.3 多核的等效降频用四个慢核换 2.5 倍性能把上面两条合起来就得到多核替代提频的核心论证。假设程序有 80% 可并行Amdahl 定律给出 4 核加速比$$ S \frac{1}{0.8/4 0.2} \frac{1}{0.4} 2.5 $$拿到 2.5 倍性能之后再算代价。要让四个核加起来不超单核的功耗预算每个核得跑在 1/2.5 的频率上电压同步按比例降$$ \frac{E_{\text{quad}}}{E_{\text{single}}} 4 \times \left(\frac{1}{2.5}\right)^2 0.64 $$$$ \frac{P_{\text{quad}}}{P_{\text{single}}} 0.64 \times \frac{1}{2.5} 0.256 $$结果很干脆性能 2.5 倍总能量只有原来的 64%功率只有 25.6%。这不是多核更省电的口号是 $V^2$ 项给出的硬账——同样的算力摊到四个低频核上每个核的电压更低四个 $V^2$ 加起来还抵不过一个高压核。部分负载下的账更微妙。题目里那段 $0.25 \times 0.25 (0.25 \times 0.2) \times 0.75 0.11$ 在算什么一个核在 25% 的时间以 25% 的功率跑其余 75% 时间以 20% 的功率空转加漏电跑加权下来总功耗是单核方案的 11%。这说明多核的能效优势不只来自并行还来自没活干的核可以真的躺下。3.4 利用率加权为什么测功耗必须跑混合负载单跑一个 benchmark 测出来的功耗没有参考价值。真实负载是多个工作负载混在一起各自的加速比差异极大。混合后的整体加速比要按时间占比加权$$ S_{\text{mix}} \frac{1}{\sum_i \frac{t_i}{S_i}} $$功率估算同理用空转功率 满载与空转的差 × 利用率做线性插值$$ P P_{\text{idle}} (P_{\text{max}} - P_{\text{idle}}) \times U $$这两个式子看着平淡但它们是所有体系结构量化分析的骨架任何一个整体指标都必须先拆成分项指标 × 权重再谈优化。跳过加权直接比峰值是这类题最常见的翻车方式——某个加速器在单个负载上 41 倍加速在混合负载里却可能因为拖慢另一段而整体变成 0.33 倍这种反差只有在加权之后才看得见。4. 存储层次64 字节的行宽如何决定矩阵转置的生死4.1 矩阵转置缓存行决定了你要踩多少次空一个 256×256 的双精度矩阵元素 8 字节缓存行 64 字节一行正好装 8 个元素。按行遍历时每 8 次访问才缺一次摊到每个元素是 1/8 次缺失。按列遍历时相邻元素的地址间隔是 256×8 2048 字节远大于行宽每一次列访问都指向一条全新的缓存行每一次都缺失。于是未分块的转置每处理 8 个元素要付出 1 次行缺失加 8 次列缺失共 9 次缺失。分块之后每个输入元素和输出元素只被取一次缺失数降到 2 次。9 比 2这就是分块能带来的全部收益来源——不是因为块小而是因为块内的工作集终于装得进缓存。顺带算一下为什么不分块就一定失败一列数据要 64 字节 × 256 16 KB 的存储而这一列在被复用之前缓存早就被后面访问的行数据挤出去了。这就是容量缺失的典型形态——不是不够快是装不下。4.2 分块转置的代码与 B 的选择/* 256×256 双精度矩阵分块转置out[j][i] in[i][j] */ #define N 256 #define B 32 /* 子块边长2×B×B×8B 16 KB压在典型 L1 容量以内 */ void blocked_transpose(double out[N][N], double in[N][N]) { for (int i 0; i N; i B) for (int j 0; j N; j B) for (int m 0; m B; m) /* 块内行偏移 */ for (int n 0; n B; n) /* 块内列偏移 */ out[j n][i m] in[i m][j n]; }四层循环的分工要说清楚最外两层i、j按步长 B 在大矩阵上跳格负责切子块最内两层m、n只在 B×B 的子块内部游走保证这一小段时间里的工作集是固定的。关键参数是 B。一次子块处理涉及in的一个 B×B 块和out的一个 B×B 块工作集为$$ 2 \times B^2 \times 8 \ \text{字节} $$B工作集结果81 KB远小于 L1但循环开销占比高164 KB偏保守3216 KB典型 L132 KB的一半通常最优6464 KB溢出 L1退化成未分块B 取太大就退回原形取太小则内层循环太短、分支和地址计算吃掉收益。而且 B 必须是被 N 整除的数否则要补边界判断反而引入额外分支。这也是为什么真实的高性能转置库会把 B 做成编译期常量、并按目标机 L1 容量生成多份特化版本——分块参数不是调出来的经验值是算出来的。还有一层容易忽略直接映射缓存下in和out的对应块可能映射到同一组一边写一边把另一边踢出去。这就是解答里为什么要提到用 2 路组相联——不是为了更大是为了让两块数据能同时驻留。相联度在这里解决的不是容量问题是冲突问题。4.3 DRAM 时序tRP tRCD CL 与那条 4/39 的通道利用率跳出缓存往下走一层DRAM 的账完全不同它算的不是命中率是时序窗口内通道被占用了多少纳秒。题目给了一组典型参数tRP 13、tRCD 13、CL 13、64 字节数据传输时间 4 ns。行缺失需要预充电、激活、读13 13 13 4 43 ns行命中同一行再读13 4 17 ns这里就是全篇最容易算错的地方。对同一个 bank 连着发两次读第二次必须等第一次的预充电、激活、CAS 全部走完才能开始间隔是 tRP tRCD CL 39 ns。而在这 39 ns 里数据通道真正忙的时间只有 4 ns$$ U \frac{4}{39} \approx 10.3% $$注意分母是 39不是 43。那 4 ns 的传输时间不在背靠背间隔里它是被包含在 CL 之后的窗口里的。分母取错利用率直接差 10%。要让通道 100% 满载控制器必须在这 39 ns 内轮流对不同的 bank 发起操作每 4 ns 发一个$$ N_{\text{bank}} \geq \frac{39}{4} \approx 10 $$如果访问模式是行命中和行缺失交替一个 bank 每 43 ns 能完成一次缺失加一次命中通道占用 8 ns利用率涨到 18.6%只需要 6 个 bank。这就把 bank 的物理意义说透了bank 不是容量单位是并行度单位。它不改变单次访问的延迟物理定律卡在那里但能把排队延迟摊薄。单 bank 与四 bank 的平均延迟对比很能说明问题单 bank 连续四个请求分别在 43、82、121、160 ns 完成平均 101.5 ns其中大部分时间花在排队上四个请求打到四个不同 bank完成时间变成 43、47、51、55 ns平均 49 ns。延迟没变排队没了。按这个逻辑bank 越多越好为什么不堆到 100 个因为每个 bank 都要配一套外围逻辑行译码、灵敏放大器、预充电电路这些电路的硅面积不产出存储容量。所以厂商停在了一个折中值上DDR3 每芯片 8 个 bankDDR4 涨到 16 个。这个数字背后没有玄学就是并行度收益和外围面积成本两条曲线的交点。4.4 AMAT为什么直接映射反而赢了最后把命中时间和缺失代价缝起来用平均内存访问时间AMAT$$ \text{AMAT} t_{\text{hit}} \text{miss_rate} \times t_{\text{penalty}} $$题目给了四组实测配置注意它们的周期时间并不相同——相联度提高会拖慢命中路径组织命中时间缺失率缺失代价AMAT64 KB 直接映射2 周期 0.5 ns2.2%20 周期1.20 ns64 KB 2 路3 周期 0.5 ns1.2%20 周期1.60 ns64 KB 4 路2 周期 0.83 ns0.33%13 周期1.69 ns64 KB 8 路3 周期 0.79 ns0.09%13 周期2.37 ns结果有点反直觉缺失率从 2.2% 一路降到 0.09%AMAT 反而从 1.20 ns 涨到 2.37 ns。原因是缺失率的收益是线性递减的2.2% 降到 1.2% 省下 0.2 ns再降到 0.33% 只省 0.05 ns而命中时间的代价是实打实加在每一次访问上的。8 路相联每 100 次访问里省下的那 2 次缺失抵不过另外 98 次命中每次多花的 0.5 ns。这就是整个存储层次设计的方法论缩影所有优化都是在命中路径上加成本、在缺失路径上减成本两者必须在 AMAT 这一个标量上会师。任何只谈缺失率降了多少、不谈命中时间涨了多少的对比都是不完整的。5. 排查这六类错误我见过太多次5.1 良品率算出来偏高一个量级面积单位混用现象同一颗芯片用 mm² 代进公式良品率算出 0.9 以上和直觉严重不符。原因缺陷密度 $D$ 的单位是每 cm² 多少个缺陷面积必须同步换成 cm²。$D\cdot A$ 本身是无量纲的所以 $D$ 和 $A$ 的单位必须互相抵消。用 mm² 会让 $D\cdot A$ 缩小 100 倍指数曲线立刻变得极其平缓。解决算之前先把 $D$、$A$ 的单位写在纸上对齐检查 $D\cdot A$ 是不是无量纲。1 cm² 100 mm²这个换算系数错了后面全错。血泪经验凡是带每单位面积的量先做单位检查再动笔能省掉一半返工。5.2 小芯片的 DPW 差 5%漏了边缘修正项现象大芯片算得很准换到小芯片就和答案对不上。原因只用 $\pi(d/2)^2 / S$ 忽略了边缘损耗。这个损耗项在绝对数量上差不多面积 2 时是 70面积 1.2 时是 91但它占的比例在变——芯片越小修正项占比越低只算面积比的误差反而越大。解决第二项 $ \pi d/\sqrt{2S} $ 必须带上。判断要不要省的办法很简单如果芯片面积超过晶圆面积的 1%边缘损耗就不能忽略。5.3 良品率按线性外推面积翻倍就以为好 die 减半现象估算两颗小芯片合并成一颗大芯片的成本算出来差不多实际上差了一大截。原因把本文还有配套的精品资源点击获取