产品更新:ICICLE V1.6.0

  • ingonyama
  • 发布于 2024-03-04 14:17
  • 阅读 13

本文介绍了ICICLE V1.6.0版本的一系列更新,包括稳定的Golang绑定、多GPU支持、向量运算API、Grumpkin曲线支持、NTT改进和MSM改进。这些更新旨在提升零知识证明(ZKP)加速的性能和效率,并扩展ICICLE的应用范围,如支持更大的电路和更多编程语言。

ICICLE 是一个使用支持 CUDA 的 GPU 进行 ZK 加速的库。

请在我们的文档网站上了解更多关于如何使用 ICICLE 的信息。

最新内容:

  • 新的 Golang 绑定
  • 多 GPU 支持
  • 向量运算
  • Grumpkin 曲线支持
  • NTT 改进
  • MSM 改进

请继续阅读以了解详细信息。

Golang 支持绑定

直到最近,我们的主要重点一直是稳定 Rust 绑定。因此,Golang 绑定仅针对 ICICLE V0.1.0 保持最新。现在情况不再如此!

Golang 绑定现在稳定并且支持曲线

  • BLS12–377
  • BLS12–381
  • BN-254
  • BW-6761

期望 Golang 绑定支持 NTT、MSM 和 G2 操作。目前不支持 Poseidon Hash、向量运算、多 GPU 和 ECNTT 等功能,但很快就会添加。

我们还简化了构建过程;只需运行我们的脚本即可为特定曲线构建库。

./build <curve> [G2_enabled]

新的 Golang 绑定带有 corecuda_rutime 包,它们提供通用的内存、流和设备管理,类似于你在 Rust 绑定中可能熟悉的内容。

有关深入的文档和示例,请查看我们的文档网站

多 GPU 支持

借助多 GPU 支持,现在可以在 ICICLE 应用程序中使用多个 GPU。这意味着你可以支持更大的电路,在多个 GPU 上分配不同的工作负载,并将应用程序扩展到数据中心级别。

目前,多 GPU 仅支持 Rust 和 C++ 绑定;Golang 支持正在开发中。

主要特点:

  • 设备管理 API — 为了尽可能简化多 GPU 的使用,我们提供了一个新的 API,允许你选择设备、列出设备和配置设备。
  • 每个线程一个设备的架构 — 每个执行线程都分配给一个单独的 GPU 设备。这种模式允许性能、可伸缩性和易用性,同时最大限度地降低复杂性。

为我们的 ICICLE 应用程序采用每个线程一个设备的架构,并提供多 GPU 支持,这一决策的驱动力在于几个令人信服的优势,这些优势与我们对性能、可伸缩性和易用性的目标相一致。这种架构允许开发人员使用多个 GPU,而无需担心内存管理和其他复杂性,因为每个 GPU 都在其自己的线程中进行管理。它也更容易调试和实施到现有的代码库中。

虽然有更高效的多 GPU 支持架构可以优化 GPU 工作负载,但它们更难调试和使用。随着更复杂的使用案例需要更高级的架构,我们的多 GPU 支持将随着时间的推移而发展。

要了解有关多 GPU 支持的更多信息,请阅读我们的文档

向量运算

我们新的向量运算 API 允许你减去、添加和乘标量数组。这些运算是模运算;模数 (p) 由标量字段类型自动确定。

use icicle_core::vec_ops::{add_scalars,sub_scalars,mul_scalars};

这些新操作支持所有字段。但是,它们目前仅在 Rust 和 C++ 绑定中可用。

use icicle_bn254::curve::{ScalarCfg, ScalarField};
use icicle_core::vec_ops::{add_scalars};

let test_size = 1 << 18;

let a: HostOrDeviceSlice<'_, ScalarField> = HostOrDeviceSlice::on_host(F::Config::generate_random(test_size));
let b: HostOrDeviceSlice<'_, ScalarField> = HostOrDeviceSlice::on_host(F::Config::generate_random(test_size));
let mut result: HostOrDeviceSlice<'_, ScalarField> = HostOrDeviceSlice::on_host(vec![F::zero(); test_size]);

let cfg = VecOpsConfig::default();
add_scalars(&a, &b, &mut result, &cfg).unwrap();

要了解有关新的向量运算 API 的更多信息并查看其用法的示例,请参阅我们的文档

Gumpkin 曲线

Grumpkin 曲线 专为 Aztec 2.0 协议设计,旨在与 BN-254 曲线协同工作,同时提供更高的计算效率和更小的证明大小。

Grumpkin 与 BN-254 兼容,无需通过切换到全新的曲线进行重大更改即可优化你的应用程序。

ICICLE 现在正式支持 Grumpkin 曲线。在此处了解更多信息这里

NTT 改进

混合基数 NTT 已经收到多次更新,现在支持:

  • 余集支持
  • 批处理模式 — 你现在可以像使用 Radix-2 NTT 一样使用批处理模式
  • 添加了对所有排序模式的支持。有关排序模式的完整列表,请阅读我们的文档
  • 快速旋转因子模式 — 通过预先分配 4N 个旋转因子(N 是最大 NTT 大小)以实现快速访问,从而加速旋转因子计算内核。

MSM 改进

MSM 算法的最新更新引入了零基点处理、显着的性能和内存优化以及标量排序和存储桶累积的改进。有关更深入的解释,你可以查看拉取请求评论 和 MSM 文档。

在 RTX 3090Ti 上的基准测试显示,更新后的 MSM 算法的性能提升范围为 1.1% 到 17.4%,并且对于较大的批处理大小,观察到了显着的增强。

要享受这些改进,只需确保你使用的是 ICICLE V1.4.0 或更高版本。

总结

有关更改的完整列表,请查看我们的更改日志

下一步是什么?

  • 多项式 API
  • Montgomery 乘法器 API
  • 更多小字段
  • Sumcheck 加速
  • 改进 Golang 绑定以支持所有 ICICLE 功能。

如果你有兴趣在预发布阶段测试这些功能,或者对设计考虑因素有任何想法,请联系 Immanuel

关注 Ingonyama

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

加入我们: https://www.ingonyama.com/career

  • 原文链接: medium.com/@ingonyama/pr...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ingonyama
ingonyama
从软件到硅重定义密码学硬件加速 // 从这里开始: https://dev.ingonyama.com