自定义指令集架构:零知识范式(第三部分)

  • 0xlita
  • 发布于 2024-09-05 10:56
  • 阅读 12

本文深入探讨了Lita公司Valida zkVM中自定义指令集架构(ISA)的设计及其优势。Valida通过定制ISA,优化了零知识证明(ZKP)的效率,并克服了传统ISA在zkVM环境中的局限性。通过Valida LLVM编译器工具链,开发者可以使用熟悉的C语言进行开发,兼顾了性能和易用性,为下一代安全高效的ZKP应用铺平了道路。

自定义 ISA(指令集架构)

2024 年 9 月 4 日

当前围绕零知识虚拟机(zkVM)架构的讨论通常围绕一个二元选择:通用指令集架构(ISA)与自定义指令集架构(ISA)。在 Lita,我们提出了一个更为细致的视角。我们认为,零知识证明(ZKP)具有独特的计算需求,需要专门优化的基础设施来实现高效执行。 这种信念促使我们在 Valida zkVM 解决方案中开发了自定义 ISA,从而最大限度地提高了 SNARK 证明的效率。

然而,自定义 ISA 一个公认的挑战是缺乏现有的编译器工具链,因此也缺乏高级语言的支持,这可能会影响性能的可用性。我们选择通过开发 Valida LLVM 编译器工具链来应对这一挑战,该工具链弥合了这一差距,使开发人员能够在我们的自定义 ISA 中使用熟悉的语言(如 C)。

>>>了解更多关于 Valida C 编译器工具链的信息

这种“双重方法”消除了在峰值性能和开发者可访问性之间进行选择的需要。它在一个用户友好的框架内释放了最大的效率,为下一代安全高效的 ZKP 应用程序铺平了道路。

1. 什么是 zkVM 中的指令集架构?

指令集架构是一种可以由物理计算机或虚拟机(VM)实现的计算模型。在 zkVM 的上下文中,指令集架构定义了编译器生成并由 VM 执行的机器代码的格式。它包括以下关键要素:

  • 寄存器:用于临时数据和指令的小型、快速存储,可实现快速数据访问和操作。
  • 程序(RAM): 用于在执行期间临时存储数据和指令的存储器,提供快速访问和修改。
  • 程序存储器: 用于永久存储程序代码的存储器,确保代码可用于执行和证明生成。
  • 指令类型: 操作类别(算术、数据移动、控制流等),旨在平衡表达能力和证明效率。
  • 指令格式: 定义指令的结构,包括操作码和操作数,针对高效执行和证明编码进行了优化。
  • 寻址模式: 用于在内存中查找数据或指令的方法,支持高效的访问模式和简单的地址计算以进行证明。

这些要素在塑造 zkVM 的功能和性能以及生成零知识证明(ZKP)方面发挥着至关重要的作用。

在 zkVM 的上下文中,指令集架构定义了编译器生成并由 VM 执行的机器代码的格式。

由于本文更深入地探讨了自定义 ISA,我们将不介绍 ISA 在 zkVM 流程中的更广泛作用。有关 zkVM 设计选择中 ISA 的更全面概述,请参阅我们之前的博客。

2. 构建自定义 ISA 的动机

开发自定义 ISA 的动机来自于认识到两个关键的局限性:首先,传统的 ISA 在 zkVM 环境中是不够的;其次,寄存器在 zkVM 算术化中的成本很高。

为什么传统的 ISA 在 zkVM 环境中会不足

传统的指令集架构是为硬件执行而设计的,经过优化以解决内存局部性问题。在硬件系统中,数据需要在硅上穿行物理距离,导致延迟随着距离的增加而增加。传统 ISA 中的通用寄存器通过在靠近 CPU 算术逻辑单元(ALU)附近提供临时存储来帮助缓解此问题,从而方便快速计算访问。这些寄存器在 ISA 中起着至关重要的作用,充当 ALU 操作的操作数。

然而,zkVM 中 SNARK 证明的环境从根本上不同。与硬件不同,在 zkVM 中访问 RAM 与访问寄存器相比,不会产生额外的开销。这使得在 zkVM 中使用传统通用寄存器的动机变得无关紧要。

电子处理器和 zk 电路之间的一个区别是,电子处理器在处理分支条件方面非常有效,可以根据条件快速执行不同的代码路径。相比之下,zk 电路需要为每个可能的分支分配计算资源,而不管采用哪条路径。

为了解决这种低效率问题,将几个功能密切相关的指令组合成一条更复杂的指令可能是有利的。 这种方法减少了分支的数量,并最大限度地降低了总体计算成本,即使它增加了程序的总指令数。

寄存器在 zkVM 算术化中的成本

在 SNARK 的上下文中,VM 的操作被算术化为代数中间表示(AIR)或 Plonkish 算术化。此过程将 VM 的操作转换为可以有效验证的多项式约束。

但是,此设置中的每个寄存器都会转换为执行跟踪中的专用列。证明者的总成本大约为 列数 x TlogT,其中 T 是每列的高度。这导致:

  • 增加证明者成本:每个额外的寄存器都需要在 trace 中增加一列。这直接增加了证明者的工作量,使得证明生成更加资源密集。
  • 复杂度管理:处理多个寄存器列会增加证明生成和验证过程的复杂性,从而可能导致更多的故障点或低效率。

通过识别并适应 zkVM 的独特环境,Valida 的自定义 ISA 消除了传统寄存器使用的无关方面,确保了用于生成 zk 证明的简化的高效架构。

3. Valida 自定义 ISA 设计:简化和专业化

Valida 的自定义 ISA 设计基于解决传统通用 ISA 带来的限制和成本。我们在下表中总结了两种不同类型的指令集架构之间的关键区别。

Valida 的自定义指令集架构(ISA)解决了通用指令集架构的局限性。

与普通 CPU 不同,Valida 不包括通用寄存器。这种简化消除了在函数调用期间保存和恢复寄存器的需要,避免了寄存器溢出并降低了代码生成复杂性。在 RAM 访问不会产生额外成本的 zkVM 中,这种设计选择简化了证明生成。

值得注意的是,Valida 通过仅支持两个专用寄存器来简化其架构:

程序计数器(PC):跟踪内存中当前指令的地址

功能

  • 通过跟踪程序中的当前位置,确保顺序执行指令。

优点

  • 有助于高效的控制流管理。
  • 简化了指令获取过程,从而加快了执行速度。

帧指针(FP):标记堆栈帧的开始。

功能

  • 在堆栈中提供一个固定的参考点,这有助于管理函数调用和局部变量。

优点

  • 通过为访问局部变量和函数参数提供稳定的参考点来简化堆栈管理。
  • 降低了管理堆栈中动态内存分配的复杂性。

没有专用的堆栈指针(SP)寄存器

Valida 使用固定大小的堆栈帧,将可变大小的局部变量和参数存储在堆上。这种设计选择进一步简化了架构并降低了证明生成的复杂性。

模块化设计

Valida 的定制 RISC 风格的模块化 zk 友好型设计包括各种专用模块或“芯片”,例如:

  • 32 位 ALU 芯片:处理 32 位无符号整数算术、按位运算和位移。
  • CPU 芯片
  • 内存芯片(RAM)
  • 程序芯片(ROM)
  • 8 位范围检查器芯片

拥有模块化架构使 Valida 能够扩展特定于应用程序的芯片,从而优化特定应用程序中的关键成本中心。例如,计算许多 SHA-256 哈希的应用程序可以通过使用包含 SHA-256 芯片的 Valida 版本来加速其证明过程。

Valida 的定制 zk 专用指令集架构(ISA)旨在最大限度地提高 zk 证明生成的效率。

自定义 ISA 的固有权衡

自定义指令集架构具有固有的权衡,例如开发人员不友好。与专门的 ISA 相关的陡峭学习曲线可能会阻止开发人员,尤其是那些习惯于使用更传统的编程语言的开发人员。这可能会导致能够有效使用该技术的开发人员数量减少,从而可能减慢创新和采用的速度。

像 Valida LLVM 编译器这样的自定义工具链通过允许开发人员在此专用 ISA 框架中使用 C 等熟悉的语言来消除这种权衡。 时间和精力的投入是非常值得的,因为它提供了长期的开发优势。

4. 为什么 Valida ISA 可能是未来的标准

通过开发一种消除传统 ISA 低效率的自定义 ISA,Valida 确立了 zkVM 性能的新基准。这表明一种简化的、有针对性的方法可以在 zk 证明生成中提供卓越的结果。

量身定制的设计:通过创建自定义 ISA,我们可以专门为 zk 证明生成优化架构。这使我们能够消除不必要的组件(如通用寄存器)并仅包含必要的专用寄存器,从而大大提高性能和效率。

专用编译器:为了补充我们的自定义 ISA,我们开发了一种专用编译器工具链 Valida LLVM。此工具链经过专门优化,可以利用我们 ISA 的独特功能,确保将高级代码高效地转换为机器指令。这种方法使开发人员能够从自定义 ISA 的卓越性能中受益,同时使用熟悉的语言进行编码。

优化协同:自定义指令集架构和专用编译器的结合使我们能够在代码执行的所有阶段实现深度优化。与传统编译器不同,Valida LLVM 可以实现只有全面掌握底层 ISA 才能实现的精确优化,从而大大提高了 zk 证明生成效率。

经验证的优势:我们与 RISC Zero、SP1 和 Jolt 等行业同行进行的性能基准测试表明,在某些情况下,Valida 可实现多个数量级的更快、更高效的 zk 证明生成。这不仅仅是一个增量改进,而是能力上的巨大飞跃。

通过率先采用这种方法,我们正在为 zkVM 和可验证计算设定新标准。我们对创新和优化的承诺确保 Valida 不仅是当今高效的解决方案,而且还采用面向未来的架构进行设计,以带领行业走向未来。

Valida 可实现多个数量级的更快、更高效的 zk 证明生成

Valida 的性能基准测试对比了行业同行,如 RISC Zero、SP1 和 Jolt

5. 超越效率:未来展望

从 20 世纪 60 年代到 21 世纪初及以后,计算架构的演变一直受到提高效率、性能和专业化需求的驱动。最初,指令集架构专为特定市场而定制,但该行业已逐渐转向更统一和通用的架构。

随着集成电路的发展,CISC 和 RISC 之间的争论突出了复杂性和效率之间的权衡。RISC 架构以其简化的指令而闻名,随着高级语言和高效执行变得越来越关键,RISC 架构获得了突出地位。

现代计算趋势正在转向特定领域架构(DSA),这些架构专为图形处理或神经网络推理等特定任务而设计。随着摩尔定律和 Dennard 缩放逼近其极限,对能源效率和性能优化的需求推动了这一转变。

定制的、特定领域 ISA 的趋势

计算的未来在于定制的、特定领域的 ISA,这些 ISA 可以优化特定应用程序的性能和效率。Valida 的自定义 ISA 通过消除无关组件并专注于 zk 证明生成来例证了这一趋势。展望未来,自定义 ISA 是开启专业计算新时代、突破性能和效率界限的关键。

—---

通过我们的 C 编译器探索 Valida

现在,你可以使用我们的通用编译器来探索我们针对 zk 优化的 VM 的效率。我们邀请你体验我们编译器工具链的 alpha 版本,使你能够在 Valida 上编译、运行和测试 C 程序。

—---

我们的三部分系列文章深入探讨了 zkVM 的世界,到此结束。我们希望你觉得这次探索内容丰富且富有洞察力。随着可验证计算领域的不断发展,我们在 Lita 致力于促进公开对话。我们欢迎你的评论、问题和想法——让我们继续对话! 要更深入地了解,请访问我们的网站GitBook 了解更多关于我们正在构建的内容以及你如何参与的信息。

\\\__________________________________\\\

免责声明:

本博客的内容,包括文本、图形和图像,受版权保护© 2023 - 2024 Lita.Foundation。保留所有权利。严禁未经本网站作者和/或所有者的明确书面许可,擅自使用和/或复制本材料。允许使用摘录和链接,但前提是要完全和清晰地注明 Lita.Foundation 的来源,并明确指向原始内容。

如有任何问题或需要获得许可,请联系 Lita Foundation。

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

0 条评论

请先 登录 后评论
0xlita
0xlita
江湖只有他的大名,没有他的介绍。