Versal AI Engine加速椭圆曲线密码学计算实践
2026/5/13 2:21:08 网站建设 项目流程

1. 项目概述:Versal AI Engine加速椭圆曲线密码学计算

在当今的数字安全领域,椭圆曲线密码学(ECC)因其高安全性和计算效率成为主流方案。其中,多标量乘法(MSM)作为ECC的核心运算,在零知识证明系统(如zk-SNARKs)中承担着最繁重的计算任务。传统CPU处理MSM时面临巨大性能瓶颈,而GPU方案又存在能效比问题。本文介绍的正是我们团队在Versal ACAP异构平台上,利用其AI Engine(AIE)阵列加速MSM中椭圆曲线点加法(PADD)的创新实践。

Versal ACAP是AMD/Xilinx推出的革命性异构计算平台,集成了三类计算单元:传统处理器系统(PS)、可编程逻辑(PL)和400个AI Engine组成的阵列。AIE作为SIMD架构的VLIW处理器,每个时钟周期可执行7条指令,在32位定点模式下支持8路并行乘加运算(MAC)。这种架构特别适合处理PADD中密集的模乘运算,但同时也面临进位传播等标量操作的挑战。

我们的核心突破在于:

  • 创新性地将进位传播完全保留在AIE内部处理,避免了与PL的数据交换开销
  • 提出四种不同的计算任务空间映射策略,在吞吐量和延迟之间实现最佳平衡
  • 针对BLS12-377曲线特性优化了模约减流程,减少约30%的冗余计算
  • 最终实现67.0 M tasks/s的吞吐量,达到理论内存带宽的50.2%,较CPU实现提升568倍

2. 技术背景与挑战解析

2.1 椭圆曲线密码学基础

现代椭圆曲线密码学通常采用扭曲爱德华曲线表示法:-x² + y² = 1 + k²x²y²。在射影坐标系(X,Y,T,Z)下,点加法运算涉及以下核心计算:

  1. 扩展坐标转换:输入点表示为(X,Y,U,Z),其中U=k·T,Z=1
  2. 混合点加法:假设两个点分别采用不同坐标系表示,减少模乘次数
  3. 完全点加法:用于结果聚合阶段,需要更完整的计算流程

以BLS12-377曲线为例,其模数p为377位,每个点加法操作需要约17次377位模乘运算。在MSM场景中,使用Pippenger算法可将计算复杂度从O(n)降至O(n/logn),但依然需要处理数千次点加法。

2.2 Versal AI Engine架构特性

AI Engine阵列采用独特的空间架构设计:

  • 计算单元:400个AIE Tile组成50x8矩阵,运行频率1.25GHz
  • 指令集:7路VLIW指令,支持8x32位SIMD乘加操作
  • 存储层次:每个Tile有32KB本地存储,支持256位宽访问
  • 互连网络:
    • AXI4 Stream:32位全连接,但每个方向端口数有限
    • Cascade Stream:384位宽,但仅限同行相邻Tile间通信
    • 共享内存:相邻Tile可通过256位总线共享数据

这种架构在提供强大并行计算能力的同时,也对数据布局和任务划分提出了严苛要求。特别是密码学计算中的进位传播操作,传统上依赖FPGA的专用进位链(CARRY8),而AIE缺乏类似硬件支持,必须通过标量单元模拟,成为主要性能瓶颈。

2.3 关键技术挑战

在AIE上实现高效PADD面临三大挑战:

  1. 计算密集型:每个点加法需要约6000次32位乘法运算
  2. 数据依赖性强:进位传播导致长依赖链,限制指令级并行
  3. 内存带宽受限:完全在PL中处理进位需要42.6 bits/cycle/Tile的带宽,远超PLIO接口能力

我们的解决方案是通过算法-架构协同优化,将计算任务分解为适合AIE处理的细粒度流水线,同时最小化Tile间的数据通信。

3. 核心算法设计与优化

3.1 大整数乘法优化

采用改进的教科书算法(schoolbook method)处理377位整数乘法:

  1. 输入分解:将377位整数a分解为16个25位段(a₁₅...a₀)
  2. 向量化处理:每8个段打包为一个向量,共2个向量{ā₀,ā₁}
  3. 块划分:将乘法计算划分为6个计算块(如图2a所示)

关键优化点:

  • SIMD并行:每个块内8个32位乘法并行执行
  • 数据复用:广播输入向量到多个计算块,减少数据搬运
  • 延迟隐藏:通过软件流水线处理多个输入序列

模乘运算采用Barrett约简算法,通过预计算常数μ=⌊b²k/m⌋(其中k=⌈log₆m⌉),将模约简转化为三次乘法:

  1. z = x × y
  2. q = (z × μ) >> b²k
  3. r = z - q × m

我们通过精心安排计算块顺序,使Barrett约简的三个乘法阶段能够无缝衔接,减少中间结果存储。

3.2 进位传播创新方案

针对AIE架构特点,我们提出两级进位传播策略:

精确进位传播(用于关键路径):

// 伪代码示例:处理向量元素的精确进位 for(int i=0; i<7; i++) { uint64_t carry = acc[i] >> 25; acc[i] &= 0x1FFFFFF; acc[i+1] += carry; }

近似进位传播(用于非关键路径):

// 利用数学恒等式 x & mask = x - (x>>s)<<s void coarse_carry(int64_t* acc) { int64_t hi = acc >> 25; int64_t lo = acc - (hi << 25); *acc = lo + (hi & 0x1FFFFFF); // 确保不进位到更高位 }

实测表明,这种混合策略可在保证数值精度的前提下,将进位传播的标量操作减少40%,同时通过VLIW指令并行执行标量和向量操作。

3.3 空间映射策略比较

我们探索了四种不同的计算任务划分方案:

  1. 细粒度并行(Fine-grained)

    • 每个AIE Tile处理一个计算块
    • 优点:最大化计算密度
    • 缺点:需要频繁Tile间通信,吞吐量仅0.012 task/cycle
  2. 粗粒度并行(Coarse-grained)

    • 每个AIE Tile处理完整模乘的三个阶段(mul_in, mul_mu, mul_m)
    • 吞吐量0.082 task/cycle,延迟1097 cycles
  3. 中粒度协作式(Medium-cooperative)

    • 两个Tile协作处理一个模乘
    • 吞吐量0.053 task/cycle
  4. 中粒度独立式(Medium-independent)

    • 两个Tile独立处理模乘的不同部分
    • 最佳延迟795 cycles,吞吐量0.050 task/cycle

最终选择粗粒度方案用于桶积累阶段(高吞吐需求),中粒度独立方案用于桶聚合阶段(低延迟需求)。

4. 实现细节与性能优化

4.1 系统级架构设计

整体系统架构分为三层:

  1. PS层:ARM处理器负责任务调度和DDR访问
  2. PL层:FPGA逻辑处理数据预处理和最终约简
  3. AIE层:400个Tile组成的计算阵列执行核心PADD运算

数据流采用双缓冲设计:

  • PL通过AXI4-Stream向AIE输送点数据
  • AIE内部使用级联流(Cascade Stream)传递中间结果
  • 计算结果通过共享内存返回PL进行最终处理

4.2 AIE内核优化技巧

通过实测总结出以下关键优化点:

指令调度

// 典型VLIW指令束示例 { vmac, vadd, scalar_add, vpermute, nop, nop, nop }

通过合理组合向量乘加、标量运算和数据重排操作,最高可实现1.98的VLIW利用率(7个槽位中平均使用5.86个)。

数据布局优化

  • 将常数μ和模数M预存储在向量寄存器中
  • 使用256位宽加载指令同时读取8个32位操作数
  • 关键中间结果保存在寄存器文件,避免内存访问

流水线控制

// 软件流水线示例:处理16个连续输入 #pragma unsafe for(int i=0; i<16; i++) { prefetch(input[i+4]); process(input[i]); }

通过循环展开和预取隐藏内存延迟,使计算单元保持90%以上利用率。

4.3 性能实测结果

在VCK190评估板上实现的性能指标:

指标本方案CPU基准提升倍数
吞吐量(M task/s)67.00.11568×
延迟(μs/task)1.059.699.2×
能效(GOPS/W)42.30.853×

内存带宽利用率达到50.2%,相比将进位传播放在PL的方案(21.9%带宽利用率)有显著提升。

5. 经验总结与优化方向

5.1 实际部署中的教训

  1. 流控问题: 初期设计时低估了AXI4 Stream背压的影响。解决方案是:

    • 在每个AIE Tile入口添加16深度的FIFO
    • 使用PL中的弹性缓冲调节数据速率
  2. Bank冲突: 当多个Tile同时访问共享内存时出现性能下降。优化方法:

    • 将共享数据分散到不同存储Bank
    • 采用交错访问模式
  3. 编译器限制: AIE编译器对复杂控制流优化不足。应对策略:

    • 将核心计算拆分为简单函数
    • 使用#pragma unroll强制展开关键循环

5.2 未来优化方向

  1. 算法层面

    • 引入Montgomery模乘减少进位传播
    • 混合Karatsuba算法提升大数乘法效率
  2. 架构层面

    • 探索3D堆叠内存缓解带宽瓶颈
    • 利用AIE近存计算特性优化数据局部性
  3. 系统层面

    • 结合PL实现异构流水线
    • 开发动态负载均衡调度器

这项研究证实了Versal ACAP在密码学加速领域的巨大潜力。我们的优化方案不仅适用于椭圆曲线计算,也可推广到其他需要大数运算的密码学原语,如RSA、格密码等。随着AIE架构的演进,预计还将获得更大的性能提升空间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询