gpu
目前在网络中零知识证明生成速度较慢,从几十秒到几分钟,不适合一些带有隐私功能钱包和匿名身份平台的应用。为了防止隐私泄露,这些证明生成无法外包给第三方。
目前命令行程序可以访问GPUs, FPGAs, ASICs等硬件设备,但是浏览器的资源很受限。目前已经有一些团队采用硬件加速zk, 例如Scroll 采用GPU 加速Prover, Ingonyama ICCLE 库 采用CUDA 加速Gnark 库。
WebGPU可以实现客户端的证明生成,允许开发基于浏览器的应用,可以利用GPU的高速以及并行计算能力。
WebGPU 于2017年由W3C 工作组开发,它定义了一组API, 可以访问GPU 算力资源。 目前标准越来越成熟,2023年4月,Google 升级Chrome 以支持WebGPU, 目前,Firfox, Safari, Edge 也提供了对WebGPU的支持。
WebGPU可以支持能用的计算,可以开发类似Rust的 WebGPU Shading Language (WGSL) 语言的程序,以定义GPU的运算。
对于GPU的计算和内存模型和CPU完全不一样,GPU首先需要考虑并行化问题。
GPU对密码算法的加速
- 有限域运算, 这是生成证明最基本的运算
- MSMs的加速,MSM(multi-scalar multiplication)约占到ZK 证明生成70%的计算量;
- NTT 加速,NTT(Number-theoretic transformations) 也占据ZK 证明生成相当一大部分计算量。
- 有效地和WebGPU, WASM , 和 Javascript 整合,有效协同CPU和GPU 运算的配合。
示例
根据 Poseidon 示例, 采用WebGPU 需要花费103ms, 采用CPU 需要1267 ms,
参考
https://hackmd.io/@weijiek/SysrYffq3#About-WebGPU
https://github.com/geometryresearch/wgsl-poseidon
https://geometry.xyz/notebook/accelerating-client-side-zk-with-webgpu