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  组参数在不同函数上均展现出了
   339   340   341   342   343   344   345   346   347   348   349