当前,各行各业中的隐私泄露问题层出不穷,人们对于隐私安全保护的需求日益提高。随着相关法律法规体系的逐渐成熟,众多隐私计算技术也应运而生,联邦学习就是其中的佼佼者。通过结合同态加密、秘密共享、不经意传输等安全计算方法,联邦学习使得多个数据持有者,可以在保证数据安全的前提下,协同构建机器学习模型。在联邦学习中所使用的多种隐私计算技术中,同态加密的功能和实用性举足轻重。
展开内层循环:展开内层循环的最大好处就是将内层循环从一个单一的整体拆解为多个组成部分,从而实现多次迭代中无数据依赖部分之间的时间交叠(overlap),进而最大程度地压缩整体运行时间。该操作可以通过 HLS 中的 UNROLL 指令实现。
将 q 的运算插入内层循环中:蒙哥马利算法中 q 是执行内层循环的前提,但是从 q 的表达式中可以发现,只依赖于 S_i 的部分比特位,因此,当某次迭代中 S_i 的这些比特位计算完毕后,即可同时开始进行下一次迭代 q 中的计算。从而节省这部分的时间开销。
流水线处理外层循环:通过展开内层循环,并且使用 HLS 中的 PIPELINE 指令,设置流水线初始化间隔为内层循环的迭代次数,内层循环将自动地根据拆解的操作执行流水线调度。该流水线处理示意图如图五所示。内层循环展开后被拆分为四个部分 S_0 , S_1 , S_2 和 S_3 。当 S_0 计算完毕后,即可开启下次迭代中 q 的计算。而 q 计算完毕后,下一次迭代计算即可开始。
限制乘法操作数位宽:在蒙哥马利算法的介绍中,我们提及,基数一般选择为 FPGA 可以轻易进行乘法运算的位宽。显然,如果直接将选择为 1024,FPGA 需要漫长的时间才能完成如此大位宽的乘法运算。因此,可以将限制为 32,便于掌控整个时序逻辑。
将乘法器声明为流水(Pipelined)乘法器:流水乘法器可以将大位宽的乘法拆分到多个时钟周期执行,从而缓解紧张的时序。简单来说,如果我们设置系统频率为 200MHz,乘法器几乎不可能在一个时钟周期,也就是 5 纳秒内完成 64 比特整数之间的乘法,但是如果将乘法时间延长到 6 个时钟周期,则乘法器则可以相对容易地在 30 纳秒内完成该乘法操作。
简化控制逻辑:这几乎是 FPGA 开发中不可缺少的优化操作了,通过缩短逻辑电路的长度,可以增加 FPGA 在更高时钟频率下完成信号传递的频率。在本工程中,可以使用独热编码(One-hot Encoding)表示状态机的状态,独热编码可以有效提高状态机的查询和匹配速度,优化时序逻辑。