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

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


                 密码方案的底层代数结构具有一定要求, 一般将支持                 NTT  操作的环称为    NTT  友好环. CTRU-Prime 的底层代数结
                            Z q [x]/(x − x−1), 具备不可分解性, 不支持一般的    NTT  操作. 因此, 优化加速素阶数域上的多项式乘
                                  n
                 构为素阶数域
                 法存在一定的挑战. 本节首先基于           CUDA Core 设计了素阶数域拓展环上的伪梅森数不完整               NTT, 此外, 在完成素
                 阶数域多项式乘法的矩阵数学推导的基础上, 利用                GPU Tensor Core 的矩阵计算优势实现教科书式的多项式乘法.
                  3.1   基于  CUDA Core 的伪梅森数不完整   NTT  的多项式乘法
                  3.1.1    伪梅森数不完整  NTT  简介
                    文献  [12] 使用伪梅森数不完整       NTT  完成素阶数域上的多项式乘法, 表          2  为  CTRU-Prime 的伪梅森数不完整
                                                                n
                 NTT  参数表. 具体来说, 基于域扩张技术, 将素阶数域           Z q [x]/(x − x−1) 上的多项式乘法转移到    NTT  友好的拓展环
                 Z q ′[x]/(x −1) 上  q (  ′   为具有  2 −2 +1 形式的伪梅森数), 且拓展环上的多项式乘法结果仅需进行简单的多项式模
                                       x
                                          y
                       N
                 运算即可回到原先的素阶数域上. 下面以             R q  上的多项式乘法   h = f ·g 为例, 介绍主体流程.
                                                                                        N
                                                                             ′
                                                                               ′
                                                                                                      ,
                    (1) 域扩张. 将   n 维多项式   f  和  g 的高次项补  0  扩充至  N  维, 得到多项式   f ,g ∈ Z q ′[x]/(x −1), 其中  N ⩾ 2n q ′
                 为某个足够大的素数使得它大于计算过程中多项式系数在                    Z 上的最大值.
                                                                                     N
                                                                       ′
                                ′
                                                                             ′
                            ′  g  的正向  NTT  变换、点乘和逆向      NTT         h = f ·g ∈ Z q ′[x]/(x −1). 需要注意的是, 由
                                                                          ′
                    (2) 计算   f  和                            变换, 得到
                 于拓展环不具备完全可分解性, 在计算            N  维正向  NTT  变换和逆向  NTT  变换时, 使用伪梅森数不完整        NTT.
                                      ′     n                      R q  中相乘的结果. 需要注意的是, 域收缩过程的
                    (3) 域收缩. 计算   h = (h mod (x − x−1)) mod q, 即为   f  和  q 在
                           ′
                 正确性由   N,q  的取值保证.

                                               表 2 伪梅森数不完整       NTT  参数集

                        方案             参数  (n,q,q 2 ,η)        N,q 的取值                  FFT trick顺序
                                                                  ′
                                                                          6
                                               11
                                                                      24
                    CTRU-Prime-653     (653,4621,2 ,3)   (1344,16777153 = 2 −2 +1)  5层基2、1层基3、1层基2
                                                                         12
                                               10
                                                                      25
                    CTRU-Prime-761     (761,4591,2 ,2)   (1536,33550337 = 2 −2 +1)        9层基2
                                               10
                                                                      25
                                                                         12
                    CTRU-Prime-1277   (1277,7879,2 ,2)   (1344,16777153 = 2 −2 +1)        9层基2

                  3.1.2    基于  CUDA Core 的优化设计与实现
                    如上所述, 基于伪梅森数不完整         NTT  的多项式乘法主要包括       5  步: 域扩张、正向   NTT  变换、点乘、逆向     NTT  变
                 换和域收缩, 需从内存模式和线程组织形式两个角度考虑, 设计融合                  5  个操作的基于   CUDA Core 的多项式乘法方案.
                    从内存延迟角度来看, 全局内存的访问延迟最高, 共享内存次之, 寄存器最少. 基于上述访存特点, 本文设计了
                 如图  1  所示的内存模式. 在该内存模式中, 仅有域扩张和域收缩需要和全局内存进行交互, 其余操作被转移到寄存
                 器和共享内存上, 从而有效提高了访存的效率. 进一步地, 在域扩张和域收缩的过程中, 合并对全局内存的访问, 以
                 提高  DRAM (dynamic random access memory) 的带宽利用率. 在执行正向和逆向     NTT  的过程中, 使用层融合技术      [28] ,
                 如图  1  所示, 线程以特定步长读取共享内存上的数据到自身寄存器后, 无需再与共享内存交互, 直接基于寄存器完
                 成多层   NTT  计算, 从而进一步减少访存带来的开销.

                                                                          1    1    1    1
                                           共享内存                           2    2    2    2
                                                                                                 1
                                                                          3    3    3    3       2
                                    数据交换
                                                                                                 3
                                                                          4    4    4    4       4
                                               正/逆      多项    域收缩                                5
                       域扩张                    向 NTT     式点                5    5    5    5       6
                                                         乘
                               寄存器                                        6    6    6    6
                                                                                                 7
                                                                                                 8
                                                                          7    7    7    7
                                                                                               寄存器
                                           全局内存                           8    8    8    8
                                                                               共享内存
                                                      基于层融合的数据交互方式
                                  图 1 基于伪梅森数不完整         NTT  的素阶数域多项式乘法的内存模式
   329   330   331   332   333   334   335   336   337   338   339