真实面经题目 · 原创解析
在 LLM 推理算子中,什么时候应使用 CUDA Core,什么时候应使用 Tensor Core?
这题考察 GPU 架构理解和算子选型能力,核心不是背概念,而是能按算子形态、数据类型、规模、访存和精度做工程判断。
真实面经题目 · 原创解析
这题考察 GPU 架构理解和算子选型能力,核心不是背概念,而是能按算子形态、数据类型、规模、访存和精度做工程判断。
我会先看 workload,而不是简单说 Tensor Core 一定更快。CUDA Core 是更通用的标量和向量计算单元,适合分支多、访存不规则、规约、归一化、索引变换、小规模 shape、特殊函数或高精度要求的计算;Tensor Core 是面向矩阵乘加的高吞吐单元,适合低精度或混合精度的 GEMM、卷积以及注意力中的矩阵乘部分,但通常要求数据类型、布局、维度对齐和足够大的计算量。LLM 推理里常见做法是组合使用:线性层、投影层、大矩阵乘尽量走 Tensor Core,softmax、layernorm、激活、采样、mask、数据重排和边界处理更多走 CUDA Core。最终选择要用 profiling 验证,包括吞吐、带宽、占用率、Tensor Core 利用率、访存效率、数值误差和端到端延迟。
CUDA Core 更像通用计算资源,能执行广泛的浮点、整数、逻辑和控制流操作。Tensor Core 则是专门加速矩阵乘加的硬件单元,吞吐高但使用条件更强。
如果计算能规整地表达为矩阵乘、批量矩阵乘或卷积,Tensor Core 通常更有优势。如果算子是逐元素、规约、扫描、排序、采样、索引变换或大量条件分支,CUDA Core 往往更合适。
Tensor Core 的优势通常建立在半精度、脑浮点、整数或混合精度上,需要接受相应误差并做累加精度控制。若业务要求严格 FP32 一致性或存在数值敏感路径,就要谨慎使用或增加校验。
Tensor Core 需要合适的矩阵块大小、数据布局和维度对齐,太小、太碎或不规则的 shape 可能无法吃满硬件。小 batch、短序列或尾块处理时,通用 CUDA Core 路径可能更稳定。
Tensor Core 只提高计算吞吐,不能自动解决内存带宽问题。如果算子主要耗在读写全局内存、转置、拷贝或格式转换上,即使用了 Tensor Core,端到端也可能没有收益。
线性层、QKV 投影、输出投影和前馈网络中的大 GEMM 适合 Tensor Core。softmax、layernorm、RMSNorm、位置编码、mask、采样和 KV cache 管理通常依赖 CUDA Core 与访存优化。
实际优化不是单点选择,而是减少中间读写和调度开销。常见思路是把 Tensor Core 负责的矩阵计算与 CUDA Core 负责的后处理尽量融合,或者通过流水让数据搬运和计算重叠。
最终要用 benchmark 和 profiler 看证据,包括 SM 占用、Tensor Core 指令利用率、内存吞吐、warp stall 原因、P50/P95 延迟和误差范围。没有 profile 的选型只是经验判断。
因为 Tensor Core 主要加速矩阵乘加,需要特定数据类型、布局和 shape。逐元素、规约、分支、采样和不规则索引无法自然映射到它,强行使用还可能引入转换开销。
不一定。小 batch 可能导致矩阵规模太小、硬件利用率不足,kernel launch、访存和尾块处理占比变大。需要结合 batch、序列长度和矩阵维度实测。
softmax 主要包含求最大值、指数、求和、归一化等规约和逐元素操作,一般不属于 Tensor Core 擅长的矩阵乘加,重点在 CUDA Core 执行效率、共享内存、warp 规约和访存模式。
要和高精度基线比较绝对误差、相对误差、端到端输出差异和任务指标,并关注极端输入。只看平均误差不够,最大误差和异常样本也要看。
可能是矩阵太小、维度不对齐、数据布局不合适、访存跟不上、转换开销高,或者 kernel 中非矩阵部分占比过大。应先定位瓶颈,再决定改布局、融合算子或换执行路径。