60 秒回答模板

我会先看 workload,而不是简单说 Tensor Core 一定更快。CUDA Core 是更通用的标量和向量计算单元,适合分支多、访存不规则、规约、归一化、索引变换、小规模 shape、特殊函数或高精度要求的计算;Tensor Core 是面向矩阵乘加的高吞吐单元,适合低精度或混合精度的 GEMM、卷积以及注意力中的矩阵乘部分,但通常要求数据类型、布局、维度对齐和足够大的计算量。LLM 推理里常见做法是组合使用:线性层、投影层、大矩阵乘尽量走 Tensor Core,softmax、layernorm、激活、采样、mask、数据重排和边界处理更多走 CUDA Core。最终选择要用 profiling 验证,包括吞吐、带宽、占用率、Tensor Core 利用率、访存效率、数值误差和端到端延迟。

考点 Tensor Core 不是万能加速
难度 真实面经题
回答目标 让面试官看到你理解 GPU 单元差异,并能把硬件能力映射到 LLM 推理算子的真实工程选型、性能验证和数值约束。

深入解析

01

硬件定位差异

CUDA Core 更像通用计算资源,能执行广泛的浮点、整数、逻辑和控制流操作。Tensor Core 则是专门加速矩阵乘加的硬件单元,吞吐高但使用条件更强。

02

算子形态判断

如果计算能规整地表达为矩阵乘、批量矩阵乘或卷积,Tensor Core 通常更有优势。如果算子是逐元素、规约、扫描、排序、采样、索引变换或大量条件分支,CUDA Core 往往更合适。

03

数据类型与精度

Tensor Core 的优势通常建立在半精度、脑浮点、整数或混合精度上,需要接受相应误差并做累加精度控制。若业务要求严格 FP32 一致性或存在数值敏感路径,就要谨慎使用或增加校验。

04

维度与对齐

Tensor Core 需要合适的矩阵块大小、数据布局和维度对齐,太小、太碎或不规则的 shape 可能无法吃满硬件。小 batch、短序列或尾块处理时,通用 CUDA Core 路径可能更稳定。

05

访存瓶颈

Tensor Core 只提高计算吞吐,不能自动解决内存带宽问题。如果算子主要耗在读写全局内存、转置、拷贝或格式转换上,即使用了 Tensor Core,端到端也可能没有收益。

06

LLM 推理场景

线性层、QKV 投影、输出投影和前馈网络中的大 GEMM 适合 Tensor Core。softmax、layernorm、RMSNorm、位置编码、mask、采样和 KV cache 管理通常依赖 CUDA Core 与访存优化。

07

融合与流水

实际优化不是单点选择,而是减少中间读写和调度开销。常见思路是把 Tensor Core 负责的矩阵计算与 CUDA Core 负责的后处理尽量融合,或者通过流水让数据搬运和计算重叠。

08

基准验证

最终要用 benchmark 和 profiler 看证据,包括 SM 占用、Tensor Core 指令利用率、内存吞吐、warp stall 原因、P50/P95 延迟和误差范围。没有 profile 的选型只是经验判断。

易错点

  • 简单说 Tensor Core 比 CUDA Core 快,没有说明适用条件。
  • 忽略数据类型、维度对齐和布局要求。
  • 只看理论 FLOPs,不看访存和端到端延迟。
  • 把 softmax、layernorm 这类规约算子也笼统归到 Tensor Core。
  • 不讨论混合精度误差和数值验证。
  • 没有提 profiling,只凭经验判断。
  • 忽略小 batch、短序列和尾块场景。

面试官追问

为什么不能所有算子都用 Tensor Core?

因为 Tensor Core 主要加速矩阵乘加,需要特定数据类型、布局和 shape。逐元素、规约、分支、采样和不规则索引无法自然映射到它,强行使用还可能引入转换开销。

小 batch 推理时 Tensor Core 还一定占优吗?

不一定。小 batch 可能导致矩阵规模太小、硬件利用率不足,kernel launch、访存和尾块处理占比变大。需要结合 batch、序列长度和矩阵维度实测。

softmax 更适合哪类核心?

softmax 主要包含求最大值、指数、求和、归一化等规约和逐元素操作,一般不属于 Tensor Core 擅长的矩阵乘加,重点在 CUDA Core 执行效率、共享内存、warp 规约和访存模式。

如何验证混合精度结果可接受?

要和高精度基线比较绝对误差、相对误差、端到端输出差异和任务指标,并关注极端输入。只看平均误差不够,最大误差和异常样本也要看。

如果 profiler 显示 Tensor Core 利用率低,可能是什么原因?

可能是矩阵太小、维度不对齐、数据布局不合适、访存跟不上、转换开销高,或者 kernel 中非矩阵部分占比过大。应先定位瓶颈,再决定改布局、融合算子或换执行路径。