NVIDIA GPU 的快速 JPEG 编解码器
更新日期:
我们基于 NVIDIA CUDA 技术打造了快速 JPEG 编解码器。Fastvideo 的 CUDA JPEG 编解码器兼顾了对标准的严格遵循与极高的编解码速度,是基线 JPEG 完整而高性能的实现。得益于基线 JPEG 算法的完全并行化,我们在 GPU 上实现了超快的 JPEG 压缩与解压缩。与面向多核 CPU 的顶级商用多线程 JPEG 编解码器相比,我们的 CUDA JPEG 编解码器更快,也快于硬件加速的 JPEG 编解码器。
受成像团队信赖
“Fastvideo SDK 快如闪电……我们现在能在 10 分钟内处理完 28,800 张图像的序列,而过去需要 10 小时。”
CUDA JPEG 编解码器的快速 JPEG 图像压缩功能
| 100% 符合 JPEG 基线标准 |
| 任意宽度和高度的灰度(8 位)和彩色(24 位)图像的基线 JPEG 压缩和解压缩 |
| 可选的 12 位 JPEG 压缩,用于灰度和彩色图像 |
| 具有可变压缩比的极快有损图像编码和解码 |
| 子采样模式:4:4:4、4:2:2、4:2:0 |
| 对于具有任意子采样的灰度和彩色图像,最小输入图像大小为 1 × 1 |
| 最大输入图像大小为 16000 × 16000 或更多(可选) |
| JPEG 图像质量范围从 1 到 100 |
| 读、编辑、写任意 EXIF 段 |
| 可选参数:Y 和 Cb/Cr 的量化表 |
| 数据输入:来自 RAM/HDD/RAID/SSD/GPU 的 8/24 位或 12/36 位图像 |
| 数据输出:RAM/HDD/RAID/SSD/GPU 中的最终压缩/未压缩 8/24 位或 12/36 位图像 |
| 标准输入格式:PGM、PPM、BMP、JPG |
| 连续数据模式(逐帧连续输入) |
| GPU 上的 JPEG 编码:输入数据解析、颜色变换、2D DCT、量化、ZigZag、AC/DC、DPCM、RLE、Huffman 编码、字节填充、JFIF 格式 |
| GPU 上的 JPEG 解码:JFIF 解析、重启标记搜索、逆 Huffman 解码、逆 RLE、逆 DPCM、AC/DC、逆 ZigZag、逆量化、逆 DCT、逆颜色变换、输出格式化 |
| 针对最新的 NVIDIA GPU 进行了优化 |
| 兼容 FFmpeg 的 MJPEG 流读写(FFmpeg 采用 LGPL v2.1 许可) |
| 与 OpenGL 的可选集成 |
| 可选支持 HD-SDI 采集卡输入(Blackmagic、Bluefish、Deltacast、Imperx) |
| 兼容 Windows 10/11 和 Linux Ubuntu、L4T |
为什么 CUDA 上的 JPEG 可以这么快?
我们成功地将 JPEG 算法的各个阶段并行化,其中也包括熵编码与解码。人们通常认为 RLE 和 Huffman 算法只能串行执行,但在我们的方案中,它们已完全并行,不再是瓶颈。我们无需再把任何环节从 GPU 卸载回 CPU 来加速——整个 CUDA JPEG 编解码器都在 GPU 上运行,因而速度极快。
关于 CUDA 上 JPEG 压缩的科研论文有很多,作者们大多试图加速 DCT 模块。在 CUDA 上做并行计算,最先想到的就是这一步,但它只是整个 CUDA JPEG 加速方案中的一小部分。实际上,并行计算可以应用于 JPEG 编码器和解码器的所有阶段。把图像切分为大量 8 × 8 或 16 × 16 的数据块,是在 GPU 上加速 JPEG 编解码器的关键。JPEG 算法中最难的部分是熵编解码,而我们同样在 GPU 上完成了它。我们在 CUDA 上的快速 JPEG 方案全程运行于 GPU,已经把 JPEG 算法的每一个环节都加速了。这正是 CUDA 图像处理加速的核心思路:为流水线中的每一种算法都实现一个基于 CUDA 的版本。我们所有的软件都遵循这一方法。
在精度方面,我们以浮点方式实现了颜色变换、2D DCT 和量化,并在最后对结果四舍五入,相比传统实现进一步提高了精度。
我们的性能远高于 CPU 上 libjpeg-turbo 和 turbojpeg 的基准结果。即使把主机到设备、设备到主机的数据传输计算在内,CUDA JPEG 编解码器的性能依然大幅领先 libjpeg-turbo。
NVIDIA GeForce RTX 4090 上的最新基准测试
我们还在最新的 NVIDIA GeForce RTX 4090 上、针对现代机器视觉相机的高分辨率图像测量了 JPEG 编码性能。一次 JPEG 压缩(图像分辨率 5328 × 4508,24 位,子采样 4:2:0,质量 90)可在 0.65 毫秒内完成,相当于约 117 GB/s 的吞吐。而 PCIe-4.0 x16 接口的实际带宽约为 24 GB/s,也就是说 GPU 处理速度几乎快了 5 倍。
一般而言,使用 JPEG 重启标记(restart marker)能获得更高的解码性能。原因在于这些重启标记会把 JPEG 比特流切分成可并行处理的分块,而并行处理正是提升性能的关键。
重启标记是 JPEG 标准中可选的一部分,jpegtran 等 CPU 工具也能插入,但只能在 CPU 上缓慢完成;我们的编码器在 GPU 上默认写入这些标记,生成的仍是完全标准、可被任何解码器读取的 JPEG 文件,据我们所知,其他 GPU JPEG 方案并不利用这些标记进行并行解码。图像内置重启标记后,解码性能会大幅提升。这对低延迟应用尤为重要,而我们的 JPEG 解码器正是为此而生,能提供非常高的性能。
快速 JPEG 编解码器的选项
我们也将快速 JPEG 编解码器纳入了主打产品 Fastvideo 图像与视频处理 SDK。该 SDK 涵盖暗场扣除、渐晕校正、白平衡、去马赛克、去噪、颜色校正、色调映射、HDR、图像滤波、1D LUT、Gamma、色彩管理、3D LUT、调色、直方图、RGB Parade(分量图)、波形监视器(Waveform)、缩放、裁剪、旋转、重映射(remap)等众多模块。
快速 JPEG 编解码器的许可
我们将 Fast JPEG 编解码器以及 Fastvideo 图像与视频处理 SDK 的其他组件授权给软件开发商、相机厂商、系统集成商与经销商。我们的 SDK 广泛应用于各类成像场景。演示版 SDK、文档、许可信息和报价均可应要求提供,我们也可根据客户需求提供定制软件开发。如果您希望在 GPU 上大幅加速自己的图像处理应用,欢迎随时与我们联系。

