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

3024                                                       软件学报  2026  年第  37  卷第  7  期


                 单, 因此本文着重考虑连续操作间的数据依赖关系. 对于位于同一数据流上的操作, 本文使用融合内核技术, 将两
                 个或多个独立的内核融合为一个内核, 有效降低了核函数启动和全局内存数据交换带来的开销.
                    面向吞吐量的      CTRU-Prime 总体架构如图    4  所示. 为进一步释放    GPU  在高吞吐量上的优势, 在单个核函数优
                 化设计的基础上, 本文结合批量模式和单一模式, 引入批处理大小, 使得同时并发多个操作, 这充分利用了多                                 SM
                 的多核特点, 进而充分提高吞吐量. 进一步地, 实现过程中存在设备端和主机端的双向数据拷贝, 考虑                             GPU  多流技
                 术能够同步进行不同方向的数值拷贝和数值计算, 本文运用多流技术, 实现不同任务间的异步操作, 进一步提高了
                 吞吐量. 为充分利用      CPU  端的多线程优势, 本文将多流技术和多线程技术相结合, CPU                 端采用多线程模式, 使得
                 CPU  和  GPU  同时高效工作.

                                                                         结合批量模式和单一模式






                       CPU                                 …
                        线
                        程
                        池                数值拷贝       数值计算       数值拷贝

                                                      GPU 多流管理
                                                      图 4 总计架构

                  4.2   多项式算子优化
                    除多项式乘法外, CTRU-Prime 中还包含多项式采样、多项式加法、多项式求逆等多项式算子. 本节对这些多
                 项式算子的    GPU  优化方法进行说明.
                  4.2.1    多项式求逆
                    对于多项式求逆, 主要考虑了两种方法: 方法             1  基于  Bernstein  等人  [31] 提出的多项式求逆方法, 在合理数据划
                 分的基础上利用多线程完成          GPU  实现; 方法  2  受  OpenSSLNTRU  [32] 的启发, 使用蒙哥马利求逆将  n 次多项式求逆
                                      2
                 转化为   1 次多项式求逆和     n /2+3n/2−2 次多项式乘法. 具体来说, 为计算        Z q [x]/ f(x) 中的  n 个多项式  ( f 1 , f 2 ,..., f n )
                                                                ∏  n
                         −1  −1   −1                                         f mul  进行一次多项式求逆运算得到
                 的逆, 即  ( f , f ,..., f ), 首先计算  n  个多项式的累乘  f mul =  f i , 接着对
                         1  2     n
                                                   ∏     ∏         i=1
                                                     k−1    n
                                                −1
                 f mul  , 最后只需利用乘法运算计算     f i −1  = f mul  ·  i=1  f i ·  i=k+1  f i. 本文分别实现了上述两种方式并进行测试. CTRU-
                  −1
                 Prime-653  的测试结果表明, 当批处理大小为        100  时, 方法  1  比方法  2  快了  56.01  倍, 这表明蒙哥马利求逆方法并
                 不适合高并行度平台. 在传统平台上, 蒙哥马利求逆的优势在于转化更为耗时的多项式求逆为多项式乘法, 但在计
                 算过程中引入了过多串行化的处理流程, 例如多个多项式相乘. 尽管多项式相乘的延迟较多项式求逆更小, 基于高
                 并行性的特点, 相比串行化的多项式相乘, GPU             更适合并行化的多项式求逆. 此外, 单个多项式求逆无法充分利用
                 GPU  资源. 因此, 综合上述两个原因, 方法       1  比方法  2  展现出更优性能, 本文采用方法       1  完成多项式求逆操作.
                  4.2.2    多项式采样与多项式加法
                    在  CTRU-Prime 中, 使用中心二项分布完成多项式采样. 具体来说, CTRU-Prime-653            使用以整数     3  为参数的
                 中心二项分布, CTRU-Prime-761   和  CTRU-Prime-1277  使用以整数  2  为参数的中心二项分布. 中心二项分布以随
                 机值为输入, 以多项式为输出, 多项式系数的生成过程是相互独立的, 因此具备良好的并行特性. 在多项式系数的
                 数据分块上, 本文综合考虑核函数的理论占用率和多项式系数对输入的依赖关系, 设计了一种基于寄存器的并行
                 方案. 该方案将计算操作转移到高速寄存器中, 并在多个多项式系数之间共享寄存器值, 充分利用                             GPU  资源.
                    多项式加法天然具备高并行度, 但对于              CTRU-Prime  而言, 直接将其实现为核函数并非最优解. 在             CTRU-
                 Prime  中, 多项式加法主要包括两个操作: 其一为二倍乘操作               g = f + f ; 其二为加一操作  g = f +1, 其中,   f、g  为
   334   335   336   337   338   339   340   341   342   343   344