AI芯片与密码学加速的结合,长期以来存在一个关键缺口:x86 CPU 拥有专用硬件指令支持无进位乘法(Carryless Multiplication)已超过十五年,而 NVIDIA GPU 始终缺乏对这一运算的原生支持。CUDA 13.3 通过引入新的 PTX 指令 clmad,填补了这一空白。该指令适用于所有 NVIDIA Ampere 及更新架构的 GPU(SM 80+)。

无进位乘法是什么

无进位乘法是一种基础运算原语,广泛应用于认证加密、纠错码和现代零知识证明系统。最小有限域 GF(2) 仅包含单个比特,其中加法为异或(XOR),乘法为与(AND)。在密码学应用中,比特通常被组合成二元扩展域 GF(2^n),其中 n 个比特表示 GF(2) 上多项式的二进制系数,运算在一个不可约多项式的模意义下进行。

扩展域中的多项式加法仍是简单的 XOR,但乘法需要对两个输入的比特进行长乘法运算。虽然可以用一系列 AND 和 XOR 操作模拟这一计算,但提取单个比特值所需的反复移位和掩码操作会带来显著开销。

clmad 指令详解

与 x86 中的 PCLMULQDQ 类似,clmad 对两个 64 位输入执行无进位乘法,输出 128 位结果。.hi 和 .lo 变体分别计算 128 位输出的高半部分和低半部分,并支持加上一个 64 位累加器。

该指令在 Ampere(sm_80 或更高)及以后的 NVIDIA GPU 上由硬件加速,可实现快速的二元扩展域乘法。在 GF(2^128) 域中,元素可通过 Karatsuba 算法仅用 6 条 clmad 指令完成乘法。

GHASH 加速效果

GHASH 是 AES-GCM 中的核心认证哈希,也是 TLS、VPN 及大多数数据中心加密背后的 AEAD 密码。它大量依赖 GF(2^128) 中的二元乘法,是 clmad 的理想应用场景。

GHASH 将输入拆分为 128 位数据块,对每个数据块执行异或累加,并在 GF(2^128) 中将累加器与哈希密钥 H 相乘。在 NVIDIA GeForce RTX 5090 上,使用 clmad 实现的 GHASH 峰值吞吐量约为 1,300 GB/s,是位切片实现的 2 倍。在 B200 上,峰值吞吐量约达 6,335 GB/s(接近 DRAM 读取带宽),比位切片方案最高提升 18.8 倍。

零知识证明:求和校验协议加速

二元扩展域也被用于零知识(ZK)证明协议,允许一方执行计算后,以密码学方式向另一方证明结果正确,而无需验证方重复计算。求和校验协议是许多证明系统的基础原语,其核心是证明一个 n 元多项式在布尔输入上的求和,使验证方的工作量仅与 n 成线性关系。

在 RTX 5090 上,使用基于 clmad 的域运算,求和校验性能提升 3–4 倍;在 B200 上最高提升 13 倍,且随多项式规模增大,性能收益略有增加。

更广泛的应用场景

无进位乘法是众多密码学与编码理论工作负载的共同内核,涵盖存储系统和电信基带处理中使用的 CRC 与 Reed–Solomon 码、闪存用 BCH 码、量子稳定子码、多种后量子密码方案,以及支撑 Binius 等现代零知识证明系统的二元域算术。GPU 上的硬件加速改变了所有这些工作负载的成本结构,惠及所有已部署的 Ampere 及更新架构系统。

Q&A

Q1:CUDA 13.3 中的 clmad 指令是什么?它解决了什么问题?

A:clmad 是 CUDA 13.3 新增的 PTX 指令,用于在 GPU 上执行无进位乘法运算。此前 NVIDIA GPU 缺乏对这一运算的原生硬件支持,开发者只能采用位切片等替代方案,性能受限。clmad 在 Ampere 及更新架构(SM 80+)上由硬件加速,可大幅提升密码学运算效率。

Q2:clmad 指令对 GHASH 性能提升有多大?

A:在 NVIDIA B200 上,使用 clmad 实现的 GHASH 峰值吞吐量约为 6,335 GB/s,接近 DRAM 读取带宽,比位切片方案最高提升 18.8 倍。在 RTX 5090 上,峰值吞吐量约为 1,300 GB/s,是位切片实现的 2 倍。

Q3:clmad 除了加速 GHASH,还能用在哪些场景?

A:clmad 的应用范围远不止 AES-GCM。它还可加速 CRC 与 Reed–Solomon 纠错码、BCH 码、量子稳定子码、后量子密码方案,以及零知识证明系统(如 Binius)中的二元域算术。求和校验协议在 B200 上使用 clmad 后性能最高提升 13 倍。

NVIDIA