Replies: 7 comments
-
1 NO Memory, NO CPU架构加速电路的机制: 2 VM中实现Profiler的方法: 3 Register Based vs Stack Based ISA对电路效率的影响: Stack Based ISA |
Beta Was this translation helpful? Give feedback.
-
这种VM架构通常采用 (Lasso) lookup table 或者 precompile专用电路
|
Beta Was this translation helpful? Give feedback.
-
NO Memory, NO Cpu 的VM架构如何帮助加速电路在传统的 VM 里,内存 RAM 和 CPU 负责执行指令,访问数据,进行运算, 但 ZKVM 里,一切计算都要被“证明”是正确的, 所以这里的主要问题在于:
优化实现思路: (1)去掉 RAM,改用 Execution Trace
(2)去掉 CPU,改用 Arithmetic Circuits
如何在VM中支持Cpu Profiler和Memory Profiler
Register Based ISA 和 Stack Based ISA 对电路效率的影响,为什么采用 Register-Based ISA 寄存器架构的话, 操作数存放在固定数量的寄存器里(R0, R1, R2...), 指令寻址更简单, 可以直接读取 例如,加法
而 Stack Based ISA 栈架构需要额外的 再一个就是,栈的访问成本高,访问 栈架构(Stack-Based ISA)虽然在 ZK 证明里通常比寄存器架构(Register-Based ISA)开销更大,不过它也有一些其他优点:
总结:
|
Beta Was this translation helpful? Give feedback.
-
1.NO Memory, NO Cpu 的VM架构如何帮助加速电路 2.如何在VM中支持Cpu Profiler和Memory Profiler 3.Register Based ISA 和 Stack Based ISA 对电路效率的影响,为什么
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
问题1在计算机执行程序时,首先会将二进制可执行文件(Executable File)读取到Memory(比如RAM)中,再由CPU按照“取指-解码-执行”的循环来工作。具体而言,CPU根据程序计数器(PC, Program Counter)指向的地址,从Memory中读取一条指令并加载到CPU的指令寄存器中。然后CPU对指令进行解码,确认指令类型(如加法、跳转、访问内存等),在确认对应的寄存器或者功能单元,如算术逻辑单元ALU。最后,由CPU对解码的指令进行执行,如果是算术运算,则在ALU中进行,访问内存如加载/存储,则访问内存,从指定地址中读取或写入,跳转则修改PC。执行完毕后,CPU会更新PC,指向下一条指令的地址。 问题2由于在zkVM中,程序不是在CPU上运行,而是将指令抽象为电路,通过SNARK/STARK等证明系统完成证明,因此导致无法使用CPU Profiler和Memory Profiler观察运行时的指令执行、函数调用栈以及内存分配、访问情况等。针对这种情况,可以对Profiler度量的内容单独进行设计。 问题3Register Based 和 Stack Based 是指令集的两种架构,这两种架构会直接影响到指令集设计的复杂度和执行的效率。寄存器式的ISA会显式的指定操作数在哪些寄存器里,结果写回哪个寄存器等,需要一个或多个memory存放当前所有寄存器的值,而且指令中会有一部分编码用于标识目标/源寄存器的编号。如
所以,通常而言寄存器式的指令总数更少,即使单条指令的电路部分会更大,但是总体可能依然更优。此外,如果电路要实现steam或者batch处理,寄存器式的ISA对并行数据流更加友好,因为每个寄存器对应一份数据,可以直接对多个寄存器并行执行某些操作,而栈式要想做并行,需要把栈内容拆分,管理一堆子栈或另行做调度,往往比较麻烦。 |
Beta Was this translation helpful? Give feedback.
-
这种 VM 架构通过去除内存和 CPU 抽象,简化了电路结构,从而加快了证明速度。它通常采用两种方式:
这类 VM 通常没有程序计数器、内存读写等传统结构,电路形式固定,结构简单,更适合用于 SNARK/STARK 系统。
手写的汇编级指令电路通常比编译器自动生成的电路更高效。因为编译器生成的电路存在冗余和不必要的中间步骤,而手写可以直接控制每一步操作和变量的使用,减少约束数量,提高执行效率。
CPU Profiler:使用一个寄存器或栈变量记录每条指令的执行开销。增加一个程序计数器(PC),每条指令携带一个常数值表示自己的资源消耗,执行时将其累加到 PC 中。 Memory Profiler:将内存划分为 page,每次访问记录所在页。通过增加一个计数器记录分页调入和调出操作的次数,便于衡量内存访问的资源消耗。这种分页方式也方便后续生成 Merkle 证明。
Register-based ISA 使用寄存器存储操作数和中间结果,支持随机访问,可以表达复杂的操作,但对应的电路结构更复杂,需要更多的约束,且 memory checking 成本较高。 Stack-based ISA 只能操作栈顶元素,指令形式更简单,电路结构更规整,但为了完成相同的功能,需要更多指令,trace 更长,证明时间更高。 因此,Register-based ISA 更适合表达复杂逻辑但电路成本高,Stack-based ISA 更适合简单线性逻辑但需要更长执行路径。 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
思考题
Beta Was this translation helpful? Give feedback.
All reactions