Page 342 - 《软件学报》2026年第7期
P. 342

胡晓雯 等: 基于   CUDA Core 和  Tensor Core 的  CTRU-Prime 高吞吐量实现                       3027


                 为简化表述, 下文中使用       cuda 乘实现代表使用     CUDA Core 实现的基于伪梅森数不完整          NTT  的多项式乘法, 使用
                 tensor 乘实现代表基于    Tensor Core 的教科书式多项式乘法.
                    文献  [12] 采用伪梅森数不完整       NTT  完成多项式乘法, 并提供了表        2  所示  CTRU-Prime 的  3  组参数的多项式
                 乘法的   C  语言实现. 如第   3.2.2  节所述, CTRU-Prime 在  R q  和   R q 2  上完成多项式乘法, 两者仅在域收缩阶段使用的
                 约减算法上存在差异. 因此, 本文将文献           [12] 中在  R q  上的多项式乘法   C  语言实现作为素阶数域上多项式乘法的
                 基准测试结果. 具体而言, 当       CTRU-Prime 的参数  n 分别设置为    653、761  和  1 277  时,  R q  上的多项式乘法的平均
                 运行时间分别为      13.98 μs、14.53 μs 和  26.32 μs.
                    图  6  展示了在不同批处理大小下, cuda 乘实现的测试结果. 得益于              GPU  的高并发处理能力, 随着批处理大小
                 的增大, 多项式乘法的吞吐量显著提升. 当            n  分别为  653、761  和  1 277  时, 同基线测试结果相比, cuda 乘实现分别
                 达到  1.09–11.08  倍、2.02–256.13  倍和  2.86–256.98  倍的吞吐量. 当  n=653  时, 伪梅森数不完整  NTT  由基  2-NTT  和
                 基  3-NTT  混合而成, 这会在  GPU  实现过程中引入额外的分支执行, 因此同达到百倍加速级的两组其他参数相比,
                 n=653  仅达到  10  倍级. 随着批处理大小的增加, GPU     任务负载也随之增加, 在一定范围内, 更大的批处理大小可以
                 让  GPU  更好地利用其并行计算资源, 实际占用率也逐步增长. 当超过特定阈值后, GPU                     处于饱和状态, 实际占用
                 率趋于理论占用率, 例如, n=761      的理论占用率为      62.5%, 批处理大小为    64、128、256、512  和  1 024  时, 实际占用
                 率分别为    20.06%、36.42%、49.62%、54.19%  和  56.72%. 当  GPU  处于饱和状态时, 核函数延迟与批处理大小呈
                 线性增长关系, 吞吐量增速逐渐放缓. 因此受实际占用率影响, 如图                   6  所示, n=653, 761, 1277  当批处理大小分别达
                 到  32、256、256  后, 延迟开始与批处理大小成正比增加, 同时吞吐量的增长速率逐步下降. 此外, 将                      cuda 乘实现
                 延迟与基线结果进行比较: n=653        在批处理大小为      32  之前延迟分别为基线结果的        1.75–3.44  倍; n=761, 1277  在批
                 处理大小小于     128  时, 在不同的批处理大小下, 延迟分别为基线结果的             42.31%–84.61%  和  35.02%–72.84%, 当批处
                 理大小超过    128  时, 延迟分别为基线结果的       1.22–3.93  倍和  1.13–3.89  倍.

                                                                 60
                      1 200   Throughput                                Throughput speedup       250
                              speedup                   10       50     Latency
                      1 000   Latency                   8        40     C baseline latency       200
                     Latency (μs)  800  latency         6 4  Throughput speedup  Latency (μs)  30  150 Throughput speedup
                              C baseline
                       600
                                                                                                 100
                                                                 20
                       400
                       200                              2        10                              50
                        0                               0         0                              0
                            1  2  4  8 16 32 64 128 256 512 1 024     1  2  4  8 16 32 64 128 256 512 1 024
                                     Batch size                                Batch size
                                      (a) n=653                                (b) n=761
                                            100     Throughput speedup       250
                                                    Latency
                                             80     C baseline latency       200
                                           Latency (μs)  60                  150  Throughput speedup

                                                                             100
                                             40
                                             20                              50
                                              0                              0
                                                  1  2  4  8 16 32 64 128 256 512 1 024
                                                           Batch size
                                                          (c) n=1277
                                      图 6 不同批处理大小的        cuda 乘实现吞吐量加速比与延迟

                    表  4  展示了  n=653  时两种  tensor 乘实现各个核函数的执行时间      (单位为   μs) 和相较于基线测试结果的加速比.
                 通用的   tensor 乘实现在不同的批处理大小上达到了           1.19–2.04  的加速比, 并在批处理大小为      8  时达到峰值. 横向比
   337   338   339   340   341   342   343   344   345   346   347