Page 344 - 《软件学报》2026年第7期
P. 344
胡晓雯 等: 基于 CUDA Core 和 Tensor Core 的 CTRU-Prime 高吞吐量实现 3029
5.3.2 多流技术
多流技术通过覆盖数值计算和数值拷贝、不同方向的数值拷贝进一步提高吞吐量并减少空闲时间, 但是
CPU 端使用多线程和 GPU 端多 CUDA 流会产生线程管理、流调用等性能开销. 本节以并行 768 个的 CTRU-
Prime-761 的密钥生成函数、密钥封装函数和密钥解封装函数为例, 评估多流技术在不同 CUDA 流数量和数值拷
贝任务量上带来的影响.
本节使用 3 组策略进行测量, 每组分别设置批处理大小为 384、192、96, 对比使用 k 个 CUDA 流和 k 次顺序
执行两种方式 k ( 依次为 2、4、8), 计算 k 个 CUDA 流相较于 k 次顺序执行节省的时间比率, 测试结果如图 7 所示.
3 个函数都在 k = 2 时出现了性能下降的情况, 这是由于 GPU 多流和 CPU 多线程产生的性能开销超过了多流技术
带来的性能提升. 在相同函数下, 随着 CUDA 流数量的增加, 数值计算和数值拷贝以更细粒度进行, 节省的时间比
率呈上升趋势. 密钥生成函数、密钥封装函数和密钥解封装函数在数值拷贝的任务量方面逐步递增, 在相同的
CUDA 流下比较 3 个函数, 任务量越多, 多流技术带来的性能提升更多.
stream num=2 72.84
stream num=4 67.27
stream num=8
60 42.97 51.96
Save up percentage (%) 40 13.32 28.43
20
0
KeyGen
Encaps
−7.53 Decaps
−20 −12.78
−25.51
图 7 多流技术在不同的 CUDA 流数量和数值拷贝任务量上的性能比较
5.4 总体效果评估
CTRU-Prime 目前仅有 CPU 平台上的 C 实现 [12] , 在本节中, 使用具备普适性的 cuda 乘实现完成多项式乘法,
在 3 组参数下对密钥生成、密钥封装和密钥解封装进行测试, 并与 C 实现和其他相关工作进行对比.
同 C 实现相比, 基于 RTX 3060 平台, 本文在 CTRU-Prime 的 3 组参数上提供了 10.316–90.317 倍的吞吐量提
升. 具体来说, CTRU-Prime-653、CTRU-Prime-761、CTRU-Prime-1277 每秒可以分别进行密钥生成 6.3 万、
5.4 万、1.6 万次, 密钥封装 63.5 万、274.5 万、160.1 万次, 密钥解封装 35.1 万、262.2 万、152.4 万次, 分别是 C
实现版密钥生成吞吐量的 68.85、79.78、66.84 倍, 密钥封装吞吐量的 10.32、46.57、46.81 倍, 密钥解封装吞吐量
的 11.43、89.19、90.32 倍. 相较于更适合小规模计算和通用任务的 C 实现, 本文更适合处理大批量任务处理的场
景, 例如云计算、服务器等. 为进一步评估本方案的资源开销, 表 6 给出了本方案在 RTX 3060 平台的资源开销.
其中, 3 组参数功耗稳定在 80 W 左右, 低于其最大功耗限制 200 W, 显存占用峰值为 156 MiB, 占总显存的约
1.9%, 核心核函数单线程使用寄存器数量为 40 个, 线程块使用共享内存数量最多 30 KB.
表 6 CTRU-Prime 高吞吐量 GPU 实现的资源开销
方案 最高功耗 (W) 显存占用峰值 (MiB) 寄存器 (个) 共享内存 (KB)
CTRU-Prime-653 80 144 40 15.75
CTRU-Prime-761 82 146 40 18
CTRU-Prime-1277 81 156 40 30
此外, 将本文与相关工作中对 Kyber [20] 和 NTRU 格基方案 [26,35] 等 GPU 加速实现进行比较, 主要衡量指标为
吞吐量, 即每秒完成的操作数 (kOP/s), 测试与对比结果如表 7 所示. 上述工作均为闭源实现, 性能结果引用自其
文章中的测试数据. 文献 [26,35] 为其他 NTRU 格基方案的最新实现, 本文的 3 组参数在不同函数上均展现出了

