把 GPU 想成一家甜品烘焙坊。多年前,店里全靠一批多面手师傅干活(CUDA Core):揉面、裱花、烤制样样都会,但一个人一次只能处理一份订单,动作再快也是“一个一个来”。后来有一款爆款蛋糕(矩阵乘法)火遍全网,订单一摞一摞地来,师傅们手速再快也跟不上了。老板咬咬牙,引入一条专用的“蛋糕流水线”(Tensor Core):原料半成品从一头送入,一整板蛋糕胚从另一头同时压出,一次成型一大片。这条流水线只会做蛋糕,别的什么都不会,但做蛋糕的速度比所有师傅加在一起还快好几倍。Tensor Core 就是 NVIDIA GPU 里这条专做矩阵乘法的流水线。本文就以流水线为向导,带你从诞生背景、计算原理、与 CUDA Core 的差异、混合精度、编程方法到工程实践,把深度学习硬件加速的关键一环看个明白。
掌握 Tensor Core 原理,是从“会调框架”走向“懂性能优化”的分水岭。它能帮你写出跑得更快的训练与推理代码,也是理解英伟达硬件演进、做 AI 芯片选型的基础。
目录
可视化演示
展示GPU Tensor Core矩阵乘法加速原理:D=AB+C混合精度计算流程,以及与CUDA Core的性能对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
矩阵乘法加速 Tensor Core单指令完成D=AB+C矩阵运算 每个时钟周期处理16x16矩阵块 D = A × B + C 点击下方按钮切换不同模式
概念概述:深度学习催生的“专属生产线”
回到烘焙坊。师傅们被爆款蛋糕的订单压得喘不过气,老板核算后发现:爆款蛋糕的需求量占全店 80% 以上,而配料和工序高度固定——把面糊倒进模具、送进烤箱、脱模包装。与其让每个师傅手工做,不如专门建一条流水线,把所有固定动作变成机械手臂的重复工序。这一步,让整店产能翻了十倍。深度学习时代的 GPU 厂商也看到了同样的机会:神经网络里绝大多数算力都花在矩阵乘法上,与其让通用计算核心硬扛,不如加一条专做矩阵乘法的流水线。
于是在 2017 年,NVIDIA 在 Volta 架构的 V100 上第一次放进了专门的矩阵乘加单元——Tensor Core,中文常译作“张量核心”。Tensor(张量)就是多维数组,矩阵是二维张量,Tensor Core 因此得名。它不是一个独立的大芯片,而是分布在各 SM(流式多处理器)内部的专用计算单元,每个 SM 里都有若干个。此后它一路演进:Turing 架构首次下放到 RTX 游戏卡,Ampere 加入 TF32 与稀疏化支持,Hopper 引入 FP8 与 Transformer Engine,Blackwell 时代与互连带宽同步升级。
Tensor Core 的核心价值一句话概括:把矩阵乘法的吞吐量提升一个数量级。V100 的 FP16 Tensor Core 峰值算力约 125 TFLOPS,是同卡 FP32 算力(15.7 TFLOPS)的 8 倍。这个差距,就是深度学习训练“等得起”和“等不起”的分界线。
流水线的价值不在于“师傅技术更好”,而在于把产量瓶颈从人肉重复劳动变成机械定制。Tensor Core 同理:它不追求通用能力,只把矩阵乘法这一件事做到极致。抓住这一点,你就握住了整个 GPU 硬件演进的钥匙。
- Tensor Core 个数$N_{\text{TC}}$ 表示 GPU 内 Tensor Core 的总数。V100 全卡 640 个,A100 全卡 432 个,新一代芯片往往更多。
- 时钟频率$f$ 是 Tensor Core 的运行频率,单位 GHz,GPU 处于加速状态时会自动提升。
- 单指令浮点运算量$\text{FLOPs}_{\text{MMA}}$ 是一条 MMA 指令完成的浮点运算次数,等于 $2 \times m \times n \times k$,其中 $m$、$n$ 是输出矩阵的行列数,$k$ 是缩减维。
- 三相相乘三者乘起来得到理论峰值 $C_{\text{peak}}$。V100 的 FP16 峰值是 125 TFLOPS,约为同卡 FP32 的 8 倍——这就是 Tensor Core 的价值所在。
计算原理:一条指令,整块矩阵
流水线的工位布置很讲究:半成品原料从左端送入,一整排机械臂同时压制,一个托盘的蛋糕胚一次成型。每一道工序处理的都是“一整板”,而不是一个一个来。Tensor Core 的计算原理正是这个思路:用一条 MMA(Matrix Multiply-Accumulate,矩阵乘累加)指令,一次算完一整块矩阵乘加,而不是像 CUDA Core 那样一个数一个数地算。
矩阵乘法 D = A×B + C 是深度学习最基本的运算。卷积可以转化成矩阵乘(im2col + GEMM),Transformer 的注意力分数 QK^T、全连接层 Wx 全是矩阵乘。Tensor Core 把一个 m×n 的输出矩阵切成一个个输出块,每个块由一条 MMA 指令完成。
以 Ampere 为代表的常用指令形状是 m16n8k8:一次计算 16 行 8 列的输出块,缩减维度 k 为 8,共 16×8×8 = 1024 次乘加。执行时,A、B 矩阵的数据先被加载到 Tensor Core 的片段寄存器(Fragment)里,然后整块一起乘加,结果直接累加到 C 矩阵上。乘加融合(FMA)让乘法和加法在同一条指令内完成,省去中间结果的存取。
回到流水线:师傅做蛋糕是一块一块做,流水线是一板一板压。Tensor Core 的“一板”就是 m×n 的输出块,“一压”就是一条 MMA 指令。生产线上没有人在写循环——硬件电路天生就在同时算 1024 次乘加,这就是它快得多的原因。
- 输入矩阵 AA 是 m 行 k 列的矩阵,相当于流水线左端送入的原料托盘,m 和 k 需要对齐 Tensor Core 的片段尺寸(如 16 和 8)。
- 输入矩阵 BB 是 k 行 n 列的矩阵,中间维度 k 与 A 相同,这是两个矩阵能相乘的前提。
- 矩阵乘法A 的每一行与 B 的每一列做内积,得到 m×n 的中间结果。这个“逐行逐列乘加”由 Tensor Core 的硬件电路并行完成,不需要软件循环。
- 乘加融合再加 C把中间结果与 C 累加得到 D。C 通常来自上一轮循环的输出,这样大矩阵乘就能分块累加完成,不浪费中间结果。
对比 CUDA Core:多面手师傅 vs 专属流水线
师傅们没有被淘汰,而是各有分工:师傅什么都做,但一次一道工序;流水线只做爆款蛋糕,但一次一板。GPU 里这两类单元长期并存:CUDA Core 负责通用计算,Tensor Core 负责矩阵乘加。要理解差异,可以从四个维度看。
指令粒度上,CUDA Core 执行 FMA(浮点乘加)指令,一次算一个标量 a×b+c;Tensor Core 执行 MMA 指令,一次算一整块矩阵乘加。数据通路上,CUDA Core 从寄存器取两个数算完写回;Tensor Core 先把数据装进片段寄存器,再整块送入乘法阵列。精度支持上,CUDA Core 覆盖 FP32/FP64 等完整精度;Tensor Core 主打 FP16/BF16/TF32/INT8 这类低精度高吞吐模式。
吞吐差距有多大?V100 的 FP16 Tensor Core 算力是 FP32 CUDA Core 的 8 倍;A100 上差距约 8 至 16 倍;H100 的 FP8 Tensor Core 算力更是达到 FP32 的数十倍。这也是深度学习框架拼命把能塞进矩阵乘的运算都塞进矩阵乘的原因。
所以别把 Tensor Core 想成“加强版 CUDA Core”。它们是两种工具:螺丝刀和冲压机的关系。螺丝刀(CUDA Core)灵活上手快,冲压机(Tensor Core)笨重但专精。聪明的老板会让冲压机干批量活,让师傅处理边角料和定制单。
- 标量循环耗时$T_{\text{CUDA Core}}$ 是用 CUDA Core 逐个标量计算一个 16×8×8 矩阵块的总时间,需要 1024 条 FMA 指令。
- 整块 MMA 耗时$T_{\text{Tensor Core}}$ 是 Tensor Core 用一条 MMA 指令完成同一块的时间,约为一条指令周期。
- 两者相除同一块矩阵,时间之比就是加速比。矩阵越大、批量越大,Tensor Core 的优势越明显。
混合精度:便宜原料配精密总检
流水线要提速,老板想到一个办法:爆款蛋糕的中间夹层用便宜些的预拌粉(FP16),但出厂质检用精密电子秤(FP32 累加器)把关。混合精度的思路一模一样:用 FP16 半精度做矩阵乘法的输入,用 FP32 单精度做累加器。
为什么这么搭配?FP16 只有 16 位(1 位符号、5 位指数、10 位尾数),数值范围和精度都比 FP32 小。但它的好处很明显:显存占用减半、内存带宽压力减半、硬件乘法电路面积和功耗大幅下降,所以 Tensor Core 的 FP16 吞吐是 FP32 的好几倍。如果直接在 FP16 里累加,误差会不断积累;于是 NVIDIA 把累加器设计成 FP32——每次乘加都把 FP16 乘积加到 FP32 累加器里,中间过程的高精度不丢失。
训练场景还有两道保险:一是主权重用 FP32 保存一份,FP16 只用于前向和反向计算,每步更新时用 FP32 权重更新完再转回 FP16;二是 Loss Scaling(损失缩放),把损失放大(如 1024 倍),防止梯度在 FP16 下过小直接变成 0,更新完权重后再缩回去。这套组合拳让多数模型在混合精度下的收敛曲线与 FP32 几乎重合。
便宜的预拌粉做夹层没问题,但总检必须用精密秤,否则一炉几百个蛋糕的重量偏差会越积越大。混合精度用“低精度算、高精度攒”的组合拳,让流水线跑得更快,成品质量还不打折——这也是 PyTorch 里一行 autocast 就能白捡 2 到 3 倍速度的奥妙。
- 半精度输入 A$\text{FP16}_{A}$ 是 16 位浮点的输入矩阵 A,数值范围有限,但足以表示神经网络中的激活和权重。
- 半精度输入 B$\text{FP16}_{B}$ 同样是 16 位浮点输入,两个半精度数相乘,乘法电路规模小、功耗低。
- 半精度乘积$\text{FP16}_{A} \times \text{FP16}_{B}$ 得到每个元素的乘积。单看乘积精度不高,但误差会在高精度累加中被稀释。
- FP32 累加器$\text{FP32}_{\text{acc}}$ 是 32 位累加寄存器,所有乘积都累加到这里,舍入误差远小于在 FP16 里累加,矩阵越大优势越明显。
编程接口:按下流水线的启动按钮
流水线建好了,怎么让工人操作?老板定了两种方式:一是直接按控制台上的“爆款蛋糕”按钮(库函数),二是让工程师写程序精确控制每一个机械臂(底层 API)。Tensor Core 的编程也分这几层。
最上层是框架自动调用。你用 PyTorch 写 torch.matmul(a, b) 或 nn.Linear,框架在 GPU 上调用 cuBLAS 库的 GEMM 函数;卷积则走 cuDNN,把卷积转成矩阵乘后交给 Tensor Core。Ampere 之后,cuBLAS 还支持 TF32 模式:把 FP32 输入自动截断成 TF32(19 位)喂给 Tensor Core,精度损失小、速度提升明显。
想做底层优化就要用 CUDA 的 WMMA(Warp-level Matrix Multiply-Accumulate,线程束级矩阵乘加)API。思路分三步:先把 A、B 数据加载到 Fragment(片段)寄存器,再调用 wmma::mma_sync 执行矩阵乘加,最后把结果存回全局内存。这个“装料 → 压制 → 出料”的过程,与流水线的操作完全对应。
对大多数 AI 工程师来说,你不需要自己写 WMMA——就像你不需要会修流水线也能点单。但知道“按钮后面发生了什么”能帮你排查性能问题:矩阵太小、维度不对齐、精度没开,都会让框架悄悄退回 CUDA Core,而你却毫无察觉。
- 乘法次数$m \times n \times k$ 表示总共要做这么多次乘法:输出有 $m \times n$ 个元素,每个元素需要做 $k$ 次乘积。
- 加法次数每个输出元素还要做 $k-1$ 次加法,约等于 $m \times n \times k$ 次。
- 总浮点运算量乘加各算一次,所以总 FLOPs 是 $2 \times m \times n \times k$。m16n8k8 的一次 MMA 就是 2048 FLOPs,乘以 Nsight 报告中的指令数即可估算算力利用率。
工程实践:别让流水线空转
流水线最怕什么?断料。机械臂压一板只要 0.1 秒,但原料从仓库运到工位要 1 秒,那流水线 90% 的时间都在空转。Tensor Core 也一样:它的计算吞吐惊人,但数据喂不进去,算力就白搭。这个“喂料速度”就是内存带宽。
工程上有一个关键指标叫算术强度(Arithmetic Intensity):每读入一个字节的数据,能换来多少次浮点运算。矩阵乘的算术强度 = 总 FLOPs ÷ 数据传输字节数。如果算术强度大于 GPU 的“平衡点”,就是计算密集型,Tensor Core 能吃饱;反之是访存密集型,瓶颈在带宽,再快的 Tensor Core 也救不了。
实操中的最佳实践包括:保证矩阵维度是 8 或 16 的倍数(必要时 padding);用分块(Tiling)让数据在共享内存和寄存器里复用,减少重复读显存;把小矩阵乘打包成大批量矩阵乘(Batched GEMM);用 Nsight Compute 查看 Tensor Core 利用率,若低于 50% 先查访存和形状;Ampere 上还可以开启稀疏化,权重一半为 0 时吞吐再翻一倍。
一句话总结工程心法:让数据就近、让形状对齐、让任务吃饱。流水线的料得提前堆在工位旁边(寄存器/共享内存),模具得和产品尺寸匹配(维度对齐),批量得大到让流水线满负荷(Batched GEMM)。做到这三点,Tensor Core 利用率基本不会差。
- 分子计算量$2 m n k$ 是矩阵乘的总浮点运算量,乘法和加法各算一次。
- 分母数据量$m k + k n + m n$ 是 A、B、C 三个矩阵的元素个数之和,再乘以每个元素的字节数(FP16 是 2 字节,TF32 是 4 字节)。
- 算术强度两者相除得到 $I$。A100 的平衡点大约在几十 FLOPs/字节量级,矩阵越大、分块越好,$I$ 越高。
应用展望:从大模型到下一代芯片
流水线模式一旦成功,老板发现它能做的不只是爆款蛋糕:只要是“大批量、同工序”的产品都能上流水线。Tensor Core 的应用边界也在不断拓宽——凡是矩阵乘密集的负载,都是它的主场。
大模型时代,Transformer 的每个组件几乎都是矩阵乘:注意力分数 QK^T、注意力加权 AV、两个全连接层 FFN、Embedding 查找……一次训练要吃掉几十万亿次矩阵乘,Tensor Core 是绝对主力。推理端,TensorRT 把模型量化为 FP16/INT8 跑在 Tensor Core 上,推荐系统可以在毫秒级完成一次打分。
传统科学计算同样受益:cuBLAS 的 GEMM 被用于气象模拟、分子动力学、地震波反演;Ampere 的 TF32 模式让这些 FP32 精度的程序近乎零成本获得 Tensor Core 加速。下一代方向:Hopper 引入 FP8 与 Transformer Engine,Blackwell 把 Tensor Core 与互连带宽同步升级,专用化趋势愈发明显;与此同时,华为昇腾、AMD CDNA 等 AI 芯片也在采用同类矩阵单元——“流水线”思路已成为行业共识。
从一条蛋糕流水线,到饼干、面包、马卡龙全部流水线化,这家店最终成了行业巨头。Tensor Core 的演进同理——矩阵乘在哪里密集,流水线就开到哪里。理解这条流水线,你就理解了 AI 硬件这十年的主线。
- 可加速占比$p$ 是程序中能被 Tensor Core 加速的计算时间占比。注意力、FFN 占比越大,$p$ 越高。
- 加速倍数$s$ 是 Tensor Core 对这部分计算带来的倍数,例如 FP16 混合精度约 2 到 3 倍、TF32 约 8 倍。
- 不可加速部分$1 - p$ 是依旧跑在 CUDA Core 上的部分(如归一化、激活函数),这部分耗时不变,是加速的天花板。
- 总加速比当 $p = 0.9$、$s = 8$ 时,$S \approx 4.7$。这说明与其让 Tensor Core 更快,不如把更多算子合并成矩阵乘。
AI 应用场景
场景一:大模型训练白捡 2 倍速度
阶段:模型训练
解决的问题:GPT 等大模型参数动辄千亿,若全用 FP32 训练,A100 的 FP32 算力只有 19.5 TFLOPS,一次训练要花数月。混合精度把前向和反向切成 FP16 交给 Tensor Core,主权重仍存 FP32,配合 Loss Scaling,训练吞吐提升 2 到 3 倍且精度几乎无损。
具体案例:某团队在 A100 上微调 7B 参数大模型,PyTorch 开启 torch.autocast("cuda") 后,单卡训练吞吐从 12k tokens/s 提升到 30k tokens/s,显存占用降低约 40%,训练时间缩短一半。
场景二:推荐系统推理延迟再降
阶段:模型推理与部署
解决的问题:推荐系统的 DNN 打分网络在批量特征矩阵乘上耗时严重,FP32 推理延迟高。用 TensorRT 将模型转为 FP16/INT8,让 Tensor Core 和 INT8 指令接管矩阵乘,同时通过校准保持精度。
具体案例:某电商推荐引擎把用户 Embedding 与候选商品特征的矩阵乘改用 TensorRT FP16 推理,P99 延迟从 8ms 降到 3ms,相同 QPS 下所需 GPU 数量减半。
场景三:科学计算矩阵求解加速
阶段:数值计算与 HPC
解决的问题:气象模拟、分子动力学等场景大量求解线性方程组,核心是 GEMM。过去只能吃 CPU 或 CUDA Core 的 FP32,性能吃紧。Ampere 的 TF32 模式让 FP32 精度的 cuBLAS 自动切入 Tensor Core,获得接近 8 倍加速。
具体案例:某高校分子动力学团队用 cuBLAS 的 TF32 GEMM 替换自研矩阵库,模拟结果精度几乎不变,单步模拟耗时降为原来的四分之一。
Python 演示
import time import torch def has_tensor_core(): if not torch.cuda.is_available(): return False major, _ = torch.cuda.get_device_capability(0) return major >= 7 # Volta 架构起引入 Tensor Core def bench_matmul(size, use_fp16, loops=20): a = torch.randn(size, size, device="cuda") b = torch.randn(size, size, device="cuda") if use_fp16: a = a.half() b = b.half() for _ in range(3): # 预热,让 cuBLAS 完成内核选择 _ = a @ b torch.cuda.synchronize() t0 = time.time() for _ in range(loops): _ = a @ b torch.cuda.synchronize() return (time.time() - t0) / loops def main(): if not has_tensor_core(): print("未检测到 Tensor Core(需要 NVIDIA Volta 及以上架构 GPU)") return size = 2048 t_fp32 = bench_matmul(size, use_fp16=False) t_fp16 = bench_matmul(size, use_fp16=True) print("矩阵大小: %d x %d" % (size, size)) print("FP32 平均耗时: %.4f 秒" % t_fp32) print("FP16 平均耗时: %.4f 秒" % t_fp16) print("加速比: %.2fx" % (t_fp32 / t_fp16)) if __name__ == "__main__": main()
major, _ = torch.cuda.get_device_capability(0)查询 GPU 算力主版本号,主版本 ≥ 7(Volta 架构)才代表有 Tensor Core。return major >= 7用算力门槛判断硬件能力,老显卡在这里会直接返回 False。a = a.half()把 FP32 张量转成 FP16,让矩阵乘走进 Tensor Core 的混合精度路径。_ = a @ b触发 cuBLAS GEMM,由库自动决定走 Tensor Core 还是 CUDA Core。torch.cuda.synchronize()阻塞等待 GPU 计算完成,否则time.time()测到的只是“排队时间”。print("加速比: %.2fx" % (t_fp32 / t_fp16))用同一次运行的两种耗时相除,得到混合精度的实际收益。
常见误区
误区我一直以为 Tensor Core 就是把 CUDA Core 的数量翻倍、频率提高,本质还是同一个东西,只是更强了。
正解两者完全不同。CUDA Core 是通用标量单元,一条指令算一个数;Tensor Core 是专用矩阵单元,一条 MMA 指令算一整块(如 16×8×8)。就像再多再快的师傅也压不出整板蛋糕,一次压一板的专属模具才是关键。它们共存于 GPU 中,各司其职。
为何常见:都叫“Core“,名字相近,而且 CUDA 编程模型对两者透明,用户很难从接口上感知差异,容易想当然地认为”核心越多越快”。
误区混合精度就是把所有数都换成 FP16,精度会变差,所以我宁可用 FP32 慢慢训,也不敢开混合精度。
正解Tensor Core 的累加器是 FP32,输入虽为 FP16,但每次乘加都累加到高精度累加器里;再配合 FP32 主权重备份和 Loss Scaling 两道保险,绝大多数模型的收敛精度与 FP32 相当,速度却快 2 到 3 倍。就像用便宜的预拌粉做夹层,但总检用精密秤,成品质量并不打折。
为何常见:直觉上“位数少 = 精度差”,忽略了累加器和高精度主权重这两道关键设计。
误区我的程序在 GPU 上跑,里面又有矩阵乘,肯定已经用上 Tensor Core 了。
正解想真正跑到 Tensor Core 上,需要同时满足:NVIDIA 较新架构(Volta+)、库函数走到 cuBLAS/cuDNN 的 Tensor Core 路径、矩阵形状对齐(维度为 8 或 16 的倍数)、混合精度开启。形状很怪、数据太小的 GEMM 很可能悄悄落到 CUDA Core。
为何常见:框架把底层细节封装得太好,用户只看到“GPU 变快了”,看不到指令层面到底用了哪个单元。
误区Tensor Core 是给神经网络专用的,普通科学计算用不上。
正解科学计算里的线性代数(如 cuBLAS 的 GEMM、LU 分解)同样是矩阵乘密集负载。Ampere 的 TF32 模式让 FP32 精度程序无需改码就能获得约 8 倍加速。只要是“大批量、同工序”的矩阵运算,流水线都欢迎。
为何常见:Tensor Core 因深度学习而广为人知,厂商宣传也主打 AI,容易让人产生“专用 = 只能 AI”的错觉。
面试题
Q1. Tensor Core 在 GPU 中主要负责加速哪类运算?
- A.标量加减运算
- B.矩阵乘累加← 正确答案
- C.数据排序任务
- D.内存地址转换
答案:B。Tensor Core 的名字来自 Tensor(张量),它最擅长的就是矩阵乘加(D = A×B + C)。标量加减、排序、内存搬运这些杂活由 CUDA Core 负责。就像甜品流水线只做爆款蛋糕,不做裱花定制。
Q2. 第一代 Tensor Core 随哪一代 GPU 架构发布?
- A.Volta 架构← 正确答案
- B.Pascal 架构
- C.Turing 架构
- D.Kepler 架构
答案:A。2017 年 NVIDIA 在 Volta 架构的 V100 上首次引入 Tensor Core。Pascal 和 Kepler 是更早的通用 GPU 架构,Turing 晚于 Volta。就像烘焙店先有爆款蛋糕,后才建流水线——V100 就是第一条流水线。
Q3. Tensor Core 混合精度计算最典型的输入与累加组合是?
- A.FP16 输入加 FP32 累加← 正确答案
- B.FP16 输入加 FP16 累加
- C.FP32 输入加 FP64 累加
- D.INT8 输入加 INT4 累加
答案:A。混合精度的标志是 FP16 输入 + FP32 累加:输入用省带宽的半精度,累加用高精度寄存器防止误差积累。FP16 累加误差大,FP64 成本高,INT4 太粗糙。就像便宜的预拌粉做夹层,但总检必须用精密秤。
Q4. 关于 Tensor Core 与 CUDA Core 的区别,下列说法正确的是?
- A.两者完全等价,只是名字不同
- B.一个做矩阵整块运算另一个做标量← 正确答案
- C.CUDA Core 算矩阵比 Tensor Core 快
- D.Tensor Core 负责处理所有图形渲染
答案:B。Tensor Core 专做整块矩阵乘加,CUDA Core 做通用标量计算,二者完全不同。CUDA Core 还负责图形与普通指令,Tensor Core 不抢渲染的活。好比螺丝刀和冲压机各有分工,谁也替代不了谁。
Q5. 在 PyTorch 中让矩阵乘自动使用 Tensor Core 的推荐做法是?
- A.开启 autocast 并搭配 NVIDIA GPU← 正确答案
- B.把所有张量类型强制改成 int64
- C.使用 CPU 线程跑同样的矩阵乘
- D.把数据拷贝到系统内存再计算
答案:A。torch.autocast("cuda") 把前向计算切成 FP16,底层 cuBLAS 自动选择 Tensor Core 路径。改成 int64 是错误用法,CPU 或系统内存计算根本走不到 Tensor Core。就像按一下“爆款蛋糕”按钮,流水线自动开工。
Q6. 哪些条件会影响 Tensor Core 实际发挥加速效果?(多选)
- A.矩阵维度是否为 8 的倍数← 正确答案
- B.是否显式开启混合精度计算← 正确答案
- C.访存带宽能否喂饱计算单元← 正确答案
- D.操作系统内核版本是否最新
答案:ABC。Tensor Core 发挥威力需要三件事齐备:维度对齐(8/16 的倍数)、混合精度开启、访存带宽足够。操作系统内核版本与矩阵乘无关。流水线要模具匹配、原料到位、供电充足,缺一不可。
Q7. MMA 指令形状 m16n8k8 的含义是?
- A.输出 16×8,缩减维为 8← 正确答案
- B.输入 16×8,输出维为 8
- C.16 线程操作 8 位整型
- D.矩阵高 16 宽 8 共 8 层
答案:A。m16n8k8 表示输出矩阵是 16×8,缩减维度 k=8,即一条指令做 16×8×8 次乘加。它描述的是“流水线一次压出多大板子”,与线程数量或整数位宽无关。
Q8. 混合精度训练保持精度的常用手段有哪些?(多选)
- A.维护 FP32 主权重副本← 正确答案
- B.对梯度使用 Loss Scaling← 正确答案
- C.前向反向都用 FP16 计算← 正确答案
- D.把全部激活存成 FP64
答案:ABC。混合精度稳住精度的三件套:FP32 主权重备份、Loss Scaling 防梯度下溢、FP16 前向反向计算。把激活存成 FP64 毫无必要,只会拖慢速度。相当于配方和质检都留了高精度副本。
Q9. WMMA 编程接口的中文含义是?
- A.线程束级矩阵乘加接口← 正确答案
- B.显卡散热风扇控制协议
- C.显存分配器底层命名
- D.NVIDIA 驱动版本编号
答案:A。WMMA 是 Warp-level Matrix Multiply-Accumulate(线程束级矩阵乘加)接口,是 CUDA 里手动让 Tensor Core 干活的 API。它与散热、驱动、显存分配无关——是工程师直接给流水线写控制程序的入口。
Q10. 以下哪些场景能明显受益于 Tensor Core?(多选)
- A.Transformer 大模型训练← 正确答案
- B.推荐系统的在线推理← 正确答案
- C.气象科学数值模拟← 正确答案
- D.鼠标键盘输入扫描
答案:ABC。Transformer 训练、推荐推理、气象模拟都是矩阵乘密集场景,Tensor Core 的高吞吐数据通路能明显受益。鼠标键盘扫描是微控制器级工作,谈不上矩阵乘。流水线只对有批量订单的生意才有价值。