简介:本文从显卡算力评测切入,系统对比GPU中通用计算单元与张量计算单元的技术定位、工作负载特征、性能边界与适用场景,帮助开发者理解矩阵乘加加速的原理与局限,掌握算力指标的解读方法,并为硬件选型、模型适配与性能评估提供条件化的决策参考。
在评估显卡或加速卡的计算能力时,一个常见误区是把厂商标称的“算力”当作一个可以横跨所有工作负载的统一指标。实际上一块加速卡内部由多种功能定位不同的计算资源组成,它们在处理不同类型的运算时效率差异极大。某一种运算变快,并不能直接推出每一种工作都会同比变快。因此,理解“算力”究竟测的是什么,必须先理解硬件内部的计算单元分工。
本文围绕两个核心对比对象展开:
两者的关系可以类比为同一座工厂中的不同车间:常规车间处理零散、多品种的加工任务,专用车间处理规格统一、批量极大的重复工序。包装、装配、运输各有速度,整厂产出取决于瓶颈环节,而非某一车间的峰值速度。
通用计算单元是 GPU 的基础执行资源,通常以 SIMT(单指令多线程)方式组织,线程束在不同数据上执行相同指令。它的特点是:
绝大多数图形渲染、通用并行计算、非规则数据处理都依赖这类单元完成。
张量计算单元针对矩阵乘加这一特定模式做了硬件级优化。矩阵乘法的本质是:结果矩阵中的一个格子,需要把左矩阵的一行与右矩阵的一列逐项相乘,再把结果累加。例如两组装数据分别为 1、2 与 3、4,则先算 1×3 和 2×4,再相加得到 11。大型矩阵会把这类“乘—加”动作重复成千上万次,天然适合交给专用单元成批处理。
张量计算单元的价值在于把这种重复模式流水线化、批量化,从而在单位时间内完成更多乘加操作。但它并非万能:数据精度、矩阵尺寸、数据供应(访存带宽与缓存命中)仍会显著影响实际速度。
尽管定位不同,两类单元在系统层面共享若干共同目标与约束:
通用计算单元以细粒度线程为调度单位,强调灵活的分支处理与延迟隐藏;张量计算单元以较大的数据块为处理粒度,强调乘加阵列的持续满载。前者像“多面手”,后者像“专用流水线”。
通用单元能力覆盖广,但峰值吞吐不高;张量单元在支持的精度格式与矩阵形状上效率极高,但对非规整尺寸、稀疏结构、特殊精度的适配需要额外处理,能力边界更窄。
| 维度 | 通用计算单元 | 张量计算单元 |
|---|---|---|
| 峰值吞吐 | 相对较低 | 相对较高(乘加密集型) |
| 灵活性 | 高 | 低 |
| 对矩阵尺寸敏感度 | 较低 | 较高,规整尺寸更高效 |
| 对数据精度敏感度 | 一般 | 明显,精度格式影响效率 |
| 对访存带宽依赖 | 高 | 高,且更依赖数据供应连续性 |
| 控制流复杂任务 | 适合 | 不适合 |
需要强调:表中“较高/较低”为相对定性描述,具体数值随硬件代际、精度格式与实现方式变化,不应直接外推为某个固定倍数。
使用通用单元通常只需常规并行编程模型;使用张量单元往往需要将算子改写为矩阵乘形式、调整数据布局、选择合适精度,改造成本更高。若框架已内置相关算子库,则接入成本可显著降低。
两类单元在同一设备内共存,硬件采购成本难以拆分;但从使用角度看,若任务无法有效利用张量单元,则为其支付的硬件成本难以转化为实际收益,这是选型时需重点评估的“能力利用率”问题。
| 对比维度 | 通用计算单元 | 张量计算单元 |
|---|---|---|
| 定位 | 通用并行执行 | 矩阵乘加专用加速 |
| 典型负载 | 渲染、非规则计算、控制流密集 | 稠密矩阵乘、卷积、线性层 |
| 编程改造量 | 低 | 中到高 |
| 适用精度 | 广泛 | 受支持格式约束 |
| 使用边界 | 峰值吞吐有限 | 非规整/稀疏任务收益下降 |
通用计算单元与张量计算单元并非替代关系,而是分工关系。理解“算力”必须先说清楚测的是什么运算、什么精度、什么规模。选型的核心不是追求某一单元的峰值数字,而是判断实际工作负载能否被对应单元高效承接,以及改造与运维成本是否可接受。回到工厂类比:整厂产出由瓶颈决定,合理编排不同车间的任务,比单纯追求某个车间的速度更有意义。