ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

为什么 GPU 解码叫硬件解码,而 CPU 解码叫软件解码?

为什么 GPU 解码叫硬件解码,而 CPU 解码叫软件解码?

这两个名字其实都只对了一半。「GPU 解码」干活的是显卡芯片上一块与 CUDA 核心、着色器阵列毫无关系的固定功能电路;「CPU 解码」当然也跑在硬件上(CPU 的执行单元),只是解码算法以指令的形式由通用处理器逐条执行。所以软和硬的分界线不在于是 CPU 还是 GPU,而在算法以什么形式存在:写成一串指令、交给通用处理器执行,是软件实现;直接做成电路、每一步由专门逻辑完成,是硬件实现。PC 上这对叫法大体对得上,只是因为那块专用解码电路恰好封装在显卡和核显芯片里。

下面分三部分:硬解时芯片里到底是谁在干活(附一组实测),为什么 GPU 的几千个核心插不上手(附一组实测),以及软硬分界线的几种边界情况。所有实验都在我自己的笔记本(i7-1255U + Iris Xe 核显,Windows 11)上完成,脚本和数据见文末说明。


一、硬解时,显卡里是谁在干活

Windows 任务管理器把 GPU 的占用拆成 3D、Copy、Video Decode 等几栏。微软 DirectX 团队的博客解释过这些名字的来历:A GPU engine represents an independent unit of silicon on the GPU that can be scheduled and can operate in parallel with one another,也就是说每一栏对应芯片上一块可以独立调度、彼此并行工作的电路单元 [1]。播放视频时涨起来的是 Video Decode 那一栏,和 3D 无关。

各家厂商的文档说得更直白。NVIDIA 在 Video Codec SDK 页面写明,GPU 里有一个或多个基于硬件的解码器和编码器,separate from the CUDA cores[2];解码器叫 NVDEC,编码器叫 NVENC。Intel 核显里干这活的是 VDBox 单元,官方指南称其性能高于 EU 阵列和 CPU、功耗低于两者 [3]。AMD 叫 VCN,苹果的规格页干脆把「媒体处理引擎」与 CPU、GPU、神经网络引擎并排列出。手机 SoC 上它更干脆是独立 IP:Arm 把 Mali GPU 和 Mali V61 VPU 作为两个 IP 分别授权,高通的视频单元叫 Venus,在 Linux 内核里有自己的驱动——这些芯片上「GPU 解码」这个说法本身就是错的。

文档是文档,我在自己的机器上验证了一遍。用 x264 编了一段 3840×2160、30 fps、High Profile(CABAC 熵编码)的 30 秒噪声视频,噪声是解码负载最重的输入。然后用 ffmpeg 分别走软解码和 Quick Sync 硬解码(h264_qsv),同时用 Windows 性能计数器采样 GPU 各引擎和整机的占用率(约 1~2 秒一次):

图 1 软解码与 Quick Sync 硬解码的占用率

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进