想象你走进一条奶茶街,街口是“全能家庭厨房”:老板什么都会做——炒饭、拉面、煎饼果子,但一次只能出一份,慢吞吞。隔壁是“连锁食堂”:几百个工人同时动手,能做大锅菜也能做小炒,但工人要经常在不同岗位间切换,总有些调度损耗。而在街尾,有一家珍珠奶茶全自动流水线:它不做饭、不炒菜,只做一件事——把奶茶配方里的“加珍珠、加奶、封膜”这套固定动作,以每小时上万杯的速度重复执行。这条流水线,就是我们要聊的 NPU 里的专用矩阵计算单元。 AI 时代的核心计算,正如“做奶茶”一样高度重复:神经网络 90% 以上的计算量,都是矩阵乘法与累加。通用处理器(CPU)为了“万能”,把大量精力花在取指令、判断分支上;GPU 虽然并行能力强,但仍要兼顾渲染等通用任务。NPU 则把一切无关逻辑砍掉,只保留最吃的“乘累加”动作,用成千上万个计算单元组成阵列,把 AI 推理的速度推向极致。接下来,我们就从这条“奶茶流水线”的内部构造开始,一层层拆开它的秘密。
理解 NPU 专用矩阵计算单元的原理与优化策略,是进入 AI 芯片设计、算子性能优化、端侧推理部署等高价值岗位的第一块敲门砖。
可视化演示
展示Tensor Core GEMM运算流程、精度演进吞吐量对比及维度对齐检查三种核心模式,直观呈现专用矩阵计算单元的工作原理与优化策略。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Tensor Core GEMM运算 矩阵分片A×B经Tensor Core单周期完成D=A×B+C WMMA指令加载16×16×16分片到寄存器执行融合乘加 D = A × B + C (fused MAC) Tensor Core单周期完成整块矩阵乘加远超通用核心
芯片架构定位
奶茶街上三种店铺,恰好对应三类计算芯片:CPU 是“全能家庭厨房”,什么菜都会做,但一道菜一道菜地出;GPU 是“连锁大食堂”,工人成百上千,能同时炒很多菜,可工人们仍需在不同窗口间来回切换;NPU 则是“珍珠奶茶全自动流水线”,只做配方固定的奶茶,却把这件事做到每小时上万杯的极致。为什么 AI 时代需要这样一条“偏科”的流水线?因为神经网络的计算高度重复——矩阵乘加占据了绝对主导,继续用通用厨房来炒这盘“大菜”,成本太高、速度太慢。
从技术上看,CPU 遵循冯诺依曼架构,指令和数据都要经过内存总线搬运,而执行一个乘加操作往往要先经历取指令、译码、访存等多个步骤,真正“干活”的时间占比很低。GPU 通过大量线程缓解了并行度问题,但仍为图形渲染保留了通用性包袱。NPU 的设计定位,就是砍掉一切非核心功能,只保留矩阵乘累加所需的硬件资源——大量的 MAC 单元、紧凑的片上缓存、极简的控制逻辑。但这也带出一个新问题:程序里不是所有部分都能被加速。
店长不会让珍珠奶茶流水线去切水果、煮面条,同样 NPU 也不擅长处理控制流和复杂 IO。真正聪明的架构是“CPU 掌勺、NPU 专攻奶茶”——各司其职,整体效率才最高。这也是如今几乎所有 AI 芯片都采用异构架构的根本原因。
- 并行比例 p表示整个任务中可以交给 NPU 加速的部分占总时间的比例,例如矩阵乘法耗时占比 90%。
- 串行比例 (1-p)剩下的无法并行化的部分,如数据预处理、控制逻辑、I/O 操作,它们仍然由 CPU 执行。
- 加速倍数 N专用矩阵单元相对通用处理器的理论加速倍数,比如 MAC 阵列相对 CPU 核心数的计算吞吐提升。
- 分母求和串行部分时间与“并行部分被 N 倍加速后”的时间相加,得到优化后的总执行时间。
- 整体加速比 S原始时间除以优化后时间;当 N 趋于无穷大时,S 极限为 1/(1-p),可见串行部分是瓶颈天花板。
矩阵单元原理
珍珠奶茶流水线的灵魂,是那个“配茶工位”。工位只做一个动作:左手取一杯茶、右手取一勺珍珠,两者混合搅拌后放进杯中。这个“一取一混一放”的原子动作,在 NPU 里就叫乘累加(MAC,Multiply-Accumulate)——取操作数 a 与 b 相乘,再把结果累加到寄存器 c 上。一条 MAC 指令完成“乘”和“加”两件事,而矩阵乘法本质上就是无数个 MAC 的叠加。
一个 MAC 单元太慢,NPU 便把成千上万个 MAC 单元排成整齐的阵列——比如 32×32 的阵列就有 1024 个 MAC。阵列规模直接决定理论峰值算力。同时,为了让工位不停歇,还要设计数据流模式:是让权重“驻留”在工位里反复使用(权重驻留),还是让输入数据“驻留”在工位里被多个权重扫描(输入驻留),抑或让部分和“驻留”在阵列中累积(输出驻留)。此外,每个工位旁都配了“小料台”——片上 SRAM 缓存,让工位就近取料,避免每次运算都跑去仓库(主内存)搬数据。
配茶工位旁边的小料台,是整条流水线不停工的秘密:珍珠、奶、茶都放在手边,一次取用、多次调配。NPU 的片上存储设计,正是把“最热的数据”放在离计算单元最近的地方,从根上缓解冯诺依曼瓶颈中的访存压力。
- 下标 i、j、k 的含义i 是 A 的行号,j 是 B 的列号,k 是内积求和的游标,遍历 0 到 K-1。
- 逐项相乘A 的第 i 行第 k 列元素与 B 的第 k 行第 j 列元素相乘,得到一项部分积。
- 累加求和把所有 k 对应的部分积累加,得到一个输出元素 C_ij,这就是“乘累加”的名称由来。
- 扩展到整个矩阵对每个输出位置 (i, j) 重复上述 MAC 过程,就完成了整块矩阵乘法。
关键计算算法
店长接到一张 100 杯奶茶的大订单,怎么让流水线满负荷运转?三个妙招:一是把订单拆成 10 杯一批(矩阵分块),每批在小料台上独立完成,不必来回往返大仓库;二是让珍珠沿着传送带依次流过每个工位(脉动阵列),工位不用自己去取,珍珠自己“流”到面前;三是一粒珍珠可以被多个工位共用(数据复用),省去重复搬运。这三点,正是 NPU 上矩阵计算算法的核心思想。
脉动阵列是其中最著名的设计:计算单元(PE)排列成规则网格,数据从阵列边缘流入,在相邻 PE 间“脉动式”传递,每个 PE 只与邻居通信,大大减少了全局互连和访存开销。数据复用则分为时间复用(同一数据被多次读取参与多次计算)和空间复用(同一数据同时广播给多个 PE 使用)。分块矩阵乘法则是把大的矩阵切成 b×b 的小块,让小块完全放入片上缓存,从而把片外访存降到最低。那么,分块到底带来多少收益?
至于 Winograd 变换,则是“配方优化”的极致:把卷积的乘法次数用更少的乘法替代。比如 F(2,3) 的 Winograd 卷积,原本 6 次乘法可以压缩到 4 次,以少量加法换来乘法量的大幅下降——毕竟在硬件里,乘法比加法贵得多。
店长的三个妙招合在一起,本质都是同一个目标:让流水线一直有活干,而不是等着原料。分块是备料策略,脉动阵列是传送带设计,数据复用是共享规则,Winograd 是配方改良——它们共同决定了 NPU 能把矩阵乘法的效率推到多高。
- 块内运算量两块 b×b 矩阵相乘需要约 2b³ 次浮点运算(b³ 次乘法加 b³ 次加法)。
- 块内数据量A 块、B 块、C 块各含 b² 个元素,共 3b² 个数据需要从外部读入。
- 算术强度公式运算量除以数据量,得到每个数据元素支撑的计算次数为 2b/3。
- 分块大小的约束b 受片上存储容量限制,b 太大放不进 SRAM,反而导致缓存失效、性能骤降。
性能特性指标
当奶茶店要采购流水线时,老板会看四个指标:每小时产多少杯(产量)、工人们是不是一直忙着(忙碌率)、每度电能做多少杯(能效比)、传送带会不会堵(带宽)。NPU 的性能考核,恰好对应这四件事。
TOPS(Tera Operations Per Second) 是衡量 NPU 理论算力的招牌数字,代表每秒执行的万亿次操作。它由 MAC 阵列规模和时钟频率直接决定:
然而,理论 TOPS 只是“纸面产量”。真正决定快慢的是 MAC 利用率——实际完成的运算量与理论峰值的比值。如果数据没喂饱、算子形状不匹配、片上存储放不下,利用率可能只有两三成。能效比(TOPS/W) 在手机、车载等端侧场景格外关键:同样做一次推理,功耗越低续航越长。带宽与时延则是隐形天花板:即使算力充裕,若数据搬运速度跟不上,计算单元依然会“等米下锅”。
店长最后发现,店里最堵的不是工位,而是那条传送带——加宽传送带(提升带宽)比添置新工位(增加 MAC)更立竿见影。NPU 的性能优化,往往不是堆算力,而是先治好“访存堵车”这个慢性病。
- MAC 单元总数 N_MAC芯片内集成的乘累加单元数量,例如 1024 个。
- 工作频率 f阵列的时钟频率,单位赫兹(Hz),1 GHz = 10⁹ 次/秒。
- 乘以 2 的原因一次 MAC 包含一次乘法和一次加法,业界按 2 次浮点操作(FLOPs)统计。
- 换算 TOPS 单位每秒 10¹² 次操作记作 1 TOPS,因此除以 10¹²。
优化映射策略
流水线买回来了,但如何把“100 杯奶茶的订单”变成流水线上每一秒的具体动作?这就需要一张排程表:把大订单拆成小批量、把原料摆放位置调整到工位最顺手的地方、把高峰期的任务错峰排开。在 NPU 的世界里,这张排程表就是编译器和运行时的工作。
算子映射把神经网络中的每一层(卷积、全连接、注意力机制)翻译成 MAC 阵列能执行的指令序列。同样一个卷积,可以切成不同方向的循环展开,映射质量直接影响利用率。访存优化则负责数据布局:把张量从 NCHW 重排成 NHWC,让访问更连续;把多个算子“融合”成一个,减少中间结果写回内存的次数。编译调度负责整体规划——图优化、常量折叠、内存分配,像店长一样决定谁先谁后。指令流水线则让取指、译码、执行三个环节重叠进行,流水线一旦“灌满”,每个周期都有指令完成。
店长的排程表越精细,工位的空闲时间就越少。同理,编译器把算子映射、数据布局、指令流水都安排好,NPU 才能从“纸面 TOPS”变成“真实帧率”。这也是为什么同样一颗芯片,有的团队跑出 80% 利用率,有的只有 30%——差距不在硬件,而在映射策略。
- 计算量 FLOPs该算子需要的浮点操作总数,例如 m×n×k 的矩阵乘法约为 2mnk 次操作。
- 数据搬运量 Bytes执行该算子需要从片外 DRAM 读入的字节数,包括权重、输入特征图和中间结果。
- 算术强度定义两者相除,得到每字节数据支撑的计算次数。
- Roofline 判据当算术强度大于硬件平台拐点强度时,算子处于计算受限;否则处于访存受限,需要优化访存而不是堆算力。
工程应用实践
当流水线在中央工厂验证成功,店长开始把它复制到街边小店、移动餐车甚至机场候机厅。每个场景的“菜单”不同、供电能力不同、空间大小不同,于是出现了各种“轻量化版本”:把配方简化成 8 位整数量化配方,把设备体积压缩到极致。这就是 NPU 从云端走向端侧的工程故事。
在端侧推理中,手机厂商把 NPU 集成进 SoC,专门跑人脸解锁、实时翻译、背景虚化,让 AI 功能在本地完成,既低延迟又保护隐私;自动驾驶汽车则使用车规级 NPU,在毫秒级内完成车道线检测与行人识别,对能效比和可靠性要求极高。在云端训练与推理一侧,NPU 集群承担大模型训练和推理服务,通过批量调度与量化压缩,在功耗预算内提供尽可能高的吞吐。能效策略的核心之一就是 INT8 量化——把 FP32 的模型压缩成 INT8,计算量减半、访存流量降为四分之一。量化背后是这样一个映射公式:
整个工程链条离不开生态工具链:模型先用 PyTorch 训练,导出为 ONNX 等中间格式,再经厂商 SDK 和编译器转换成 NPU 指令,最后配合算子库和调试工具完成性能调优。就像奶茶店的“中央配方 + 门店 SOP + 设备手册”,一环缺了,流水线都转不起来。
从中央工厂到街边小店,NPU 的每一次落地,都是“专用化”与“场景化”的胜利:配方可以被压缩,设备可以被缩小,但那条只做矩阵乘累加的流水线初心不变——用最专一的硬件,换取最极致的效率。
- 缩放因子 s由浮点数据的最大值和最小值除以量化范围(如 255)得到,决定每个整数刻度代表的浮点步长。
- 零点 z浮点值 0 映射到整数后的偏移量,保证浮点 0 能精确表示,避免有符号量化出现偏差。
- 量化映射浮点值除以缩放因子、加上零点、四舍五入,得到 INT8 整数。
- 反量化恢复推理输出仍是整数,乘回缩放因子并减零点,恢复成近似浮点值,精度损失可控。
AI 应用场景
手机端侧 AI 推理
阶段:推理部署
解决的问题:传统做法是把图片上传到云端识别,不仅依赖网络、延迟高,还会泄露用户隐私。手机端集成的 NPU 可以在本地直接完成人脸解锁、场景识别、实时翻译等任务,利用专用矩阵计算单元高效执行卷积和全连接层,功耗控制在毫瓦级。
具体案例:某旗舰手机的人脸解锁流程中,AI 模型从 1 万张照片中提取 128 维特征向量,端侧 NPU 将整个特征提取过程压缩到 30 毫秒内完成,且全程不离开设备,功耗相比 GPU 方案降低约 70%。
自动驾驶环境感知
阶段:实时推理
解决的问题:自动驾驶需要在 100 毫秒内完成多个摄像头图像的语义分割与目标检测,CPU 算力不足、GPU 功耗过高。车规级 NPU 以高性能矩阵计算单元并行处理多路图像,用高能效比满足车规功耗与散热约束。
具体案例:某 L3 级自动驾驶方案在单颗 NPU 上同时运行语义分割、车道线检测和 3D 目标检测三个模型,利用分块矩阵乘法和 INT8 量化,整体延迟控制在 80 毫秒以内,整机功耗低于 15 瓦。
云端大模型推理服务
阶段:云端推理与训练
解决的问题:大语言模型推理时,权重矩阵庞大,访存成为瓶颈,通用 GPU 在成本和功耗上难以大规模扩展。云端 NPU 集群通过算子融合、内存优化和量化压缩,将矩阵乘累加效率推向极致。
具体案例:某云厂商部署 NPU 推理集群,将 7B 参数大模型的单 token 生成延迟从 50 毫秒降至 18 毫秒,单位请求功耗降低约一半;配合批处理调度,吞吐量提升 3 倍以上。
Python 演示
import numpy as npimport time def matmul_naive(A, B): # 朴素三层循环实现矩阵乘法, 模拟CPU逐元素计算 n = A.shape[0] C = np.zeros((n, n)) for i in range(n): for j in range(n): for k in range(n): C[i, j] += A[i, k] * B[k, j] return C def matmul_blocked(A, B, block=32): # 分块矩阵乘法, 模拟NPU片上缓存数据复用 n = A.shape[0] C = np.zeros((n, n)) for i in range(0, n, block): for j in range(0, n, block): for k in range(0, n, block): for ii in range(i, min(i + block, n)): for jj in range(j, min(j + block, n)): s = 0.0 for kk in range(k, min(k + block, n)): s += A[ii, kk] * B[kk, jj] C[ii, jj] += s return C def compute_tops(mac_count, freq_hz): # 根据MAC阵列规模估算理论算力TOPS flops = 2 * mac_count * freq_hz return flops / 1e12 if __name__ == "__main__": np.random.seed(42) n = 128 A = np.random.rand(n, n) B = np.random.rand(n, n) t0 = time.time() C1 = matmul_naive(A, B) t1 = time.time() print("朴素乘法耗时: {:.3f} 秒".format(t1 - t0)) t0 = time.time() C2 = matmul_blocked(A, B, block=32) t1 = time.time() print("分块乘法耗时: {:.3f} 秒".format(t1 - t0)) ok = np.allclose(C1, C2, atol=1e-6) print("两种方法结果一致: {}".format(ok)) tops = compute_tops(mac_count=1024, freq_hz=1e9) print("1024个MAC, 1GHz理论算力: {:.2f} TOPS".format(tops))
for i in range(0, n, block):按 block 大小切分行,把大矩阵化成能放入“片上缓存”的小块。s += A[ii, kk] * B[kk, jj]这就是一次乘累加(MAC):相乘再加到局部累加器 s 上。C[ii, jj] += s将小块内累积的完整内积结果写回输出矩阵,减少中间读写。flops = 2 * mac_count * freq_hz理论峰值 = MAC 数 × 频率 × 2(乘加算两次操作)。np.allclose(C1, C2, atol=1e-6)校验分块与朴素版本结果是否一致,证明分块在数值上等价。
常见误区
误区既然 NPU 跑 AI 模型那么快,干脆把 CPU 扔掉,所有任务都交给 NPU 不就行了?
正解NPU 是“单品种流水线”,只擅长矩阵乘累加这类高度规整的运算;遇到分支判断、字符串处理、系统调度,它反而又慢又笨。就像奶茶流水线做不了煎饼果子,NPU 必须由 CPU 驱动和配合,负责加载模型、分配任务、处理结果。真实芯片里 NPU 往往是 SoC 中的一个加速器模块,而非独立主机。
为何常见:人们看到 TOPS 数字高达几十上百,本能地以为“算力即一切”,忽略了“专用”二字本身就意味着适用范围狭窄。
误区买芯片只看 TOPS,认为 50 TOPS 的 NPU 一定比 30 TOPS 的快一倍。
正解TOPS 只是理论峰值,真实性能取决于 MAC 利用率。如果片上存储不够、带宽不足、算子形状与阵列不匹配,实际利用率可能只有 20%-40%。好比一条每小时能封 10000 杯的流水线,如果珍珠传送带只能供 3000 杯的原料,产量永远上不去。
为何常见:厂商宣传页最显眼的数字就是 TOPS,而利用率需要实际测试才能知道,信息不对称让买家容易盲信峰值。
误区以为把训练好的模型文件直接扔给 NPU,它就会自动运行,完全不需要代码。
正解NPU 无法直接执行 PyTorch 里的算子,必须经过编译器把计算图一步步映射成 MAC 阵列指令序列,还要做算子融合、内存分配、指令调度。就像流水线需要“排程表”才能知道先做哪杯、珍珠放多少,这个排程表就是编译器生成的指令流。
为何常见:AI 框架的“一行代码跑模型”体验让人忽略了底层编译器的存在,直到性能不达标需要手动调优时才恍然大悟。
误区既然 NPU 是“矩阵计算单元”,那它肯定只能做矩阵乘法,别的什么都干不了。
正解卷积可以转换成矩阵乘法(im2col),注意力机制的 QKV 计算本质也是矩阵乘法,甚至很多向量运算、池化操作也能映射到矩阵计算单元上执行。NPU 还配备向量单元和标量单元处理非矩阵运算,只是矩阵单元是性能王牌。
为何常见:望文生义,把“专用矩阵计算单元”理解成了“仅支持单一数学运算”,忽略了硬件单元之间相互配合的完整架构。
误区听说 NPU 都是跑推理的,训练模型必须用 GPU,所以 NPU 学习价值不大。
正解新一代 NPU 广泛支持训练:华为昇腾、Google TPU 都具备完整的训练能力,训练时矩阵乘法的规模更大、对精度更敏感,需要支持 FP16/BF16 混合精度。端侧 NPU 也在支持“端侧学习”和联邦学习,只是推理场景部署量最大、最广为人知。
为何常见:早期 NPU 主要出现在手机和安防领域,大家看到的都是推理应用,形成了“NPU 只能推理”的刻板印象。
面试题
Q1. NPU 中“专用矩阵计算单元”的“专用”主要指什么?
- A.仅支持整数运算不支持浮点运算
- B.专为张量和矩阵乘累加而设计← 正确答案
- C.只能运行 Linux 一种操作系统
- D.只支持一个固定神经网络模型
答案:B。NPU 的“专用”指硬件架构面向张量运算(尤其是矩阵乘累加)做了极致优化,而不是通用指令集。它仍支持浮点、支持运行多种模型,B 正确,其他选项都过于绝对化。
Q2. 一次 MAC(乘累加)操作完成的核心运算是?
- A.比较两个操作数并取出较大者
- B.执行一次乘法并累加到一个结果上← 正确答案
- C.把数据从内存搬运到寄存器上
- D.对数据执行一次非线性激活变换
答案:B。MAC 的英文全称是 Multiply-Accumulate,即先做乘法再做加法,如 acc += a×b,这正是矩阵乘法的最小原子操作。比较、搬运、激活都不是 MAC 的定义。
Q3. 下列哪些因素会影响 NPU 实际性能的发挥?
- A.MAC 阵列的实际利用率← 正确答案
- B.片外存储带宽的供给瓶颈← 正确答案
- C.算子到指令序列的映射质量← 正确答案
- D.芯片外壳的颜色和封装形状
答案:ABC。实际性能取决于 MAC 利用率、带宽以及编译器映射质量,这与“流水线是否满负荷、原料传送带是否够宽、排程表是否合理”是同一道理。外壳颜色显然与性能无关。
Q4. 某 NPU 集成 2048 个 MAC 单元,工作频率 1 GHz,其理论算力约为?
- A.2.048 TOPS
- B.4.096 TOPS← 正确答案
- C.8.192 TOPS
- D.1.024 TOPS
答案:B。TOPS = 2 × MAC 数 × 频率 ÷ 10¹² = 2 × 2048 × 1e9 ÷ 1e12 = 4.096 TOPS。注意每次 MAC 按 2 次操作计,这是最容易漏掉的系数。
Q5. 脉动阵列中“脉动”一词的核心含义是?
- A.数据按电压大小以脉冲模式传播
- B.数据在相邻计算单元间规律流动并复用← 正确答案
- C.时钟频率随负载变化自动上下跳动
- D.阵列连接拓扑在运行中随机动态改变
答案:B。脉动阵列的特点是每个 PE 只从邻居接收数据、计算后再传给下一个邻居,数据像血液脉冲一样规则地“流动”,从而减少全局访存。B 准确描述了这一机制。
Q6. 相比 CPU 和 GPU,NPU 的典型架构特征包括?
- A.面向张量运算的专用数据通路← 正确答案
- B.同等算力下能效比显著更高← 正确答案
- C.需要专用编译器配合完成算子映射← 正确答案
- D.完全取代 CPU 承担所有系统任务
答案:ABC。NPU 用大量 MAC 阵列和片上缓存专攻张量运算,能效比突出,且必须靠专用编译器把高层算子翻译成底层指令。但 NPU 不能取代 CPU——它只是 SoC 中的加速器。
Q7. 当某算子的算术强度(FLOPs/Bytes)较低时,意味着?
- A.计算单元饱和度成为主要瓶颈
- B.访存带宽更容易成为性能瓶颈← 正确答案
- C.该算子一定无法在 NPU 上运行
- D.编译器无需做任何性能优化工作
答案:B。算术强度低说明每个字节数据只支撑很少计算,数据搬运时间会淹没计算时间,属于“访存受限”。此时应优化数据复用、增大分块,而不是堆算力。低算术强度不代表不能运行,更不代表无需优化。
Q8. 端侧移动设备选择 NPU 的核心原因是?
- A.降低手机整体制造成本
- B.高能效比让 AI 推理更省电← 正确答案
- C.兼容更多种操作系统内核
- D.减少对云端数据中心的依赖
答案:B。端侧电池和散热预算极为有限,NPU 以更高的 TOPS/W 完成推理,显著延长续航。成本、系统兼容性不是 NPU 的根本优势,D 虽是副产物但并非“核心”原因。
Q9. INT8 量化加速 NPU 推理的根本原因是?
- A.把浮点数值变成精度更高的数据
- B.减少数据搬运量和计算单元开销← 正确答案
- C.让模型在训练时收敛得更快更好
- D.缩短反向传播时梯度的计算过程
答案:B。INT8 数据体积仅为 FP32 的四分之一,访存流量大幅下降;同时整数乘累加在硬件上更简单,同面积可放更多 MAC。量化通常在推理阶段使用,与训练收敛、反传加速没有直接关系,精度也并非变高。
Q10. 提升 NPU 上矩阵乘法 MAC 利用率的常见手段包括?
- A.增大矩阵分块以增强数据复用← 正确答案
- B.将相邻算子融合以减少中间搬运← 正确答案
- C.提高片外带宽或扩大片上缓存← 正确答案
- D.关闭编译器全部优化选项以减少开销
答案:ABC。分块提升数据复用,算子融合减少中间结果读写,带宽和缓存提升则让数据供给更充足,三者都能把 MAC 喂得更饱。关闭优化只会让利用率下降,显然错误。