加的各种算法。 http://www.hyperelliptic.org/EFD/g 1 p/auto-shortw-jacobian-0.html#addition-madd-2007-bl 假设两个点的 Projective 坐标分别为(x 1, y 1, z 1) 和 (x 2, y 2, z 2) ,则通过如下的计算公式可以计算出点加的结果 (x 3, y 3, z 3)。 详细给出计算过程的原因是想表明整个计算过程绝大部分是整数运算。整数的位宽取决于椭圆曲线的参数。给出一些常见的椭圆曲线的位宽: BN 256 - 256 bits BLS 12 _ 381 - 381 bits BLS 12 _ 377 - 377 bits 特别注意的是,这些整数运算是在模域上的运算。模加 / 模减相对来说简单,重点看看模乘的原理和实现。 模乘(Modular Muliplication) 给定模域上的两个值:x 和 y。模乘计算指的是 x*y mod p。注意这些整数的位宽是椭圆曲线的位宽。模乘的经典算法是蒙哥马利乘法(Montgomery Muliplication)。在进行蒙哥马利乘法之前,被乘数需要转化为蒙哥马利表示: 蒙哥马利乘法计算公式如下: 蒙哥马利乘法实现算法又有很多:CIOS (Coarsely Integrated Operand Scanning),FIOS(Finely Integrated Operand Scanning),以及 FIPS(Finely Integrated Product Scanning)等等。本文不深入介绍各种算法实现的细节,感兴趣的读者可以自行研究。 为了对比 FPGA 以及 GPU 的本身的性能差别,选择最基本的算法实现方法: 简单的说,模乘算法可以进一步分成两种计算:大数乘法和大数加法。理解了 MSM 的计算逻辑的基础上,可以选择模乘的性能(Throughput)来对比 FPGA 和 GPU 的性能。 观察和思考 在这样的 FPGA 设计下,可以估算出整个 VU 9 P 能提供的在 BLS 12 _ 381 椭圆曲线点加 Throughput。一个点加(add_mix 方式)大约需要 12 个模乘。FPGA 的系统时钟为 450 M。 在同样的模乘 / 模加算法下,采用同样的点加算法,Nvidia 3090 的点加 Troughput(考虑到数据传输因素)超过 500 M/s。当然,整个计算涉及到多种算法,可能存在某些算法适合 FPGA,有些算法适合 GPU。采用一样的算法对比的原因,想对比 FPGA 和 GPU 的核心计算能力。 基于上述的结果,总结一下 GPU 和 FPGA 在 ZKP 证明性能方面的比较: 总结 越来越多的应用开始采用零知识证明技术。但 ZKP 算法比较多,各种项目使用不同的 ZKP 算法。从我们的实践工程经验来看,FPGA 是个选项,但是目前 GPU 是个性价比高选项。FPGA 偏好确定性计算,有 latency 以及功耗的优势。GPU 可编程性高,有相对成熟的高性能计算的框架,开发迭代周期短,偏好需要 throughput 场景。 来源:金色财经lg...