本文介绍了ICICLE库的更新,该库使用CUDA加速GPU上的ZK证明。主要更新包括:支持Poseidon哈希和优化的Merkle树构建器,新的混合基数NTT算法,改进的MSM设计,以及修复了Rust绑定在Windows上的支持问题。还包括性能测试结果,展示了Poseidon哈希树构建器和NTT算法的性能提升。
ICICLE 是一个使用支持 CUDA 的 GPU 进行 ZK 加速的库。请访问我们的文档网站,了解更多关于如何使用 ICICLE 的信息。
亮点:
Poseidon 是最流行的 zk 友好的哈希函数。我们的 Poseidon 哈希实现基于 Filecoin 优化的实例 (Neptune)。
主要特性:
为了补充 Poseidon,我们还实现了一个针对 GPU 优化的 Merkle 树构建器。该树构建器仅支持 Poseidon 哈希,并且针对与 Poseidon 哈希一起使用进行了优化。该实现允许用户指定他想要在内存中存储多少个顶行摘要。这对于高树非常有用。
树构建器将首先确定适合 1GB 设备内存的子树的高度。然后将创建多个流以匹配 YourDeviceMemory / 1GB。所有子树将由此流池构建。这允许从主机复制叶子,并并行构建子树 — 利用 GPU 和主机 RAM+CPU 的最大能力。
我们在以下规范上运行了 Poseidon 哈希树构建器:
CPU: 12th Gen Intel(R) Core(TM) i9–12900K
GPU: RTX 3090 Ti
树高: 30 (2²⁹ 个元素)
基准测试包括将数据复制到设备和从设备复制数据。
我们邀请你阅读我们关于此功能的更新文档。
到目前为止,我们只支持 Radix-2 算法,该算法擅长处理较小的 NTT 大小。混合基数 NTT 在较大的序列长度或序列长度是小素数的乘积时,尤其有利。
主要特性:
我们目前将小 NTT 定义为 logn < 16,但是我们将添加一种更动态和启发式的方法来自动选择最适合输入的算法。
如果你希望覆盖算法的 “自动选择”,ICICLE 允许你显式定义你希望使用的算法。
我们邀请你阅读我们关于此功能的更新文档。
ICICLE V1.0 中扩展曲线(G2 曲线)的 MSM 支持已损坏。我们在此版本中修复了扩展曲线支持。修复细节可以在pull request中找到。
我们将 MSM 和 Batched MSM 合并到一个方法中。Batched MSM 现在除了大型三角形累积之外,还支持桶累积,使其性能与我们最新的算法相当。新的桶累积方法对并行处理更加友好,应该用于大多数用例。参考pull request 以更好地理解该实现。
我们邀请你阅读我们关于此功能的更新文档。
修复了 NTT 中发生的溢出错误
当对从具有 2¹⁷ 个元素的较大集合中导出的 2¹⁶ 大小的子集执行 NTT 时,由于 BatchMulKernel 组件中的索引变量超过其最大值,该过程失败。发生此溢出错误的原因是索引变量声明为 int 类型,该类型无法容纳此操作所需的大索引值。通过将索引变量更改为具有更大容量的 long 类型来解决此问题,从而防止溢出并确保操作成功完成。
有关更多详细信息,请参阅 pull request。
Rust 绑定现在支持 Windows
我们通过有条件地管理曲线配置并简化 Rust 中的复杂类型处理(而不是通过外部 C 函数)来修复了 Windows 上的 Rust 构建。有关修复的详细说明,请参阅 pull request。
有关更改的完整列表,请查看我们的 更改日志。即将推出的功能(将在未来几天内发布):
如果你有兴趣在预发布阶段测试这些功能,或者对设计考虑因素有一些想法,请联系 Immanuel
Twitter: https://twitter.com/Ingo_zk
Documentation: https://dev.ingonyama.com/
YouTube: https://www.youtube.com/@ingo_zk
GitHub: https://github.com/ingonyama-zk
LinkedIn: https://www.linkedin.com/company/ingonyama
Join us: https://www.ingonyama.com/career
- 原文链接: medium.com/@ingonyama/pr...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!