Skip to content

Commit 8cb3be4

Browse files
authored
feat: merge-train/avm (#17702)
BEGIN_COMMIT_OVERRIDE feat!: apply batch inverses and precomputed inverses for AVM tracegen (#17669) feat(avm)!: Reduce the number of registers from 7 to 6 (#17688) chore(avm): opcode maps should follow ordering of their enum (#17682) END_COMMIT_OVERRIDE
2 parents 4e2791e + abe8c13 commit 8cb3be4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+969
-918
lines changed

barretenberg/cpp/pil/vm2/alu.pil

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,14 +335,13 @@ DIV_OPS_NON_U128 * (ib * ic - (ia - sel_op_div * helper1)) = 0;
335335

336336
sel_op_eq * (1 - sel_op_eq) = 0;
337337
pol DIFF = ia - ib;
338-
339-
// Use helper1 to invert DIFF.
338+
pol commit ab_diff_inv; // Helper column for inverting DIFF.
340339
// ic is a boolean output and ic == 1 <==> a == b.
341340
// Important: ic boolean constraint is enforced as part of write to memory due to ic_tag == U1 as enforced by #[C_TAG_CHECK].
342341

343342
// sel_op_eq == 1 => [ic == 1 <==> DIFF == 0]
344343
#[EQ_OP_MAIN]
345-
sel_op_eq * (1 - sel_tag_err) * (DIFF * (ic * (1 - helper1) + helper1) - 1 + ic) = 0;
344+
sel_op_eq * (1 - sel_tag_err) * (DIFF * (ic * (1 - ab_diff_inv) + ab_diff_inv) - 1 + ic) = 0;
346345

347346
// LT
348347

barretenberg/cpp/pil/vm2/execution.pil

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,10 @@ sel_instruction_fetching_success {
201201
// subtraces, mem ops, etc (defined later in this file)
202202
subtrace_id, subtrace_operation_id, dyn_gas_id,
203203
// register information
204-
sel_mem_op_reg[0], sel_mem_op_reg[1], sel_mem_op_reg[2], sel_mem_op_reg[3], sel_mem_op_reg[4], sel_mem_op_reg[5], sel_mem_op_reg[6],
205-
rw_reg[0], rw_reg[1], rw_reg[2], rw_reg[3], rw_reg[4], rw_reg[5], rw_reg[6],
206-
sel_tag_check_reg[0], sel_tag_check_reg[1], sel_tag_check_reg[2], sel_tag_check_reg[3], sel_tag_check_reg[4], sel_tag_check_reg[5], sel_tag_check_reg[6],
207-
expected_tag_reg[0], expected_tag_reg[1], expected_tag_reg[2], expected_tag_reg[3], expected_tag_reg[4], expected_tag_reg[5], expected_tag_reg[6]
204+
sel_mem_op_reg[0], sel_mem_op_reg[1], sel_mem_op_reg[2], sel_mem_op_reg[3], sel_mem_op_reg[4], sel_mem_op_reg[5],
205+
rw_reg[0], rw_reg[1], rw_reg[2], rw_reg[3], rw_reg[4], rw_reg[5],
206+
sel_tag_check_reg[0], sel_tag_check_reg[1], sel_tag_check_reg[2], sel_tag_check_reg[3], sel_tag_check_reg[4], sel_tag_check_reg[5],
207+
expected_tag_reg[0], expected_tag_reg[1], expected_tag_reg[2], expected_tag_reg[3], expected_tag_reg[4], expected_tag_reg[5]
208208
} in
209209
precomputed.sel_exec_spec {
210210
// execution opcode
@@ -233,31 +233,27 @@ precomputed.sel_exec_spec {
233233
precomputed.sel_mem_op_reg[3],
234234
precomputed.sel_mem_op_reg[4],
235235
precomputed.sel_mem_op_reg[5],
236-
precomputed.sel_mem_op_reg[6],
237236
// read / write per register
238237
precomputed.rw_reg[0],
239238
precomputed.rw_reg[1],
240239
precomputed.rw_reg[2],
241240
precomputed.rw_reg[3],
242241
precomputed.rw_reg[4],
243242
precomputed.rw_reg[5],
244-
precomputed.rw_reg[6],
245243
// whether we should perform a tag check on the register
246244
precomputed.sel_tag_check_reg[0],
247245
precomputed.sel_tag_check_reg[1],
248246
precomputed.sel_tag_check_reg[2],
249247
precomputed.sel_tag_check_reg[3],
250248
precomputed.sel_tag_check_reg[4],
251249
precomputed.sel_tag_check_reg[5],
252-
precomputed.sel_tag_check_reg[6],
253250
// expected register tag to perform the check against
254251
precomputed.expected_tag_reg[0],
255252
precomputed.expected_tag_reg[1],
256253
precomputed.expected_tag_reg[2],
257254
precomputed.expected_tag_reg[3],
258255
precomputed.expected_tag_reg[4],
259-
precomputed.expected_tag_reg[5],
260-
precomputed.expected_tag_reg[6]
256+
precomputed.expected_tag_reg[5]
261257
};
262258

263259
//////// ADDRESSING ////////
@@ -280,17 +276,17 @@ pol commit sel_should_read_registers;
280276
sel_should_read_registers = SEL_SHOULD_RESOLVE_ADDRESS * (1 - sel_addressing_error);
281277

282278
// Registers
283-
pol commit register[7];
279+
pol commit register[6];
284280
// Memory Acccesses
285-
pol commit sel_mem_op_reg[7];
281+
pol commit sel_mem_op_reg[6];
286282
// Read / Write selectors
287-
pol commit rw_reg[7];
283+
pol commit rw_reg[6];
288284
// Memory Tag
289-
pol commit mem_tag_reg[7];
285+
pol commit mem_tag_reg[6];
290286
// Whether we should perform a tag check on the register
291-
pol commit sel_tag_check_reg[7];
287+
pol commit sel_tag_check_reg[6];
292288
// Expected tag
293-
pol commit expected_tag_reg[7];
289+
pol commit expected_tag_reg[6];
294290

295291
// NOTE: Constraints on the registers are in execution_registers.pil.
296292
// The "output we want is" sel_register_read_error from execution_registers.pil.

barretenberg/cpp/pil/vm2/execution/registers.pil

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ include "../memory.pil";
44
namespace execution;
55

66
// Input columns from execution.pil:
7-
// pol commit register[7];
8-
// pol commit sel_mem_op_reg[7];
9-
// pol commit rw_reg[7];
10-
// pol commit mem_tag_reg[7];
11-
// pol commit sel_tag_check_reg[7];
12-
// pol commit expected_tag_reg[7];
7+
// pol commit register[6];
8+
// pol commit sel_mem_op_reg[6];
9+
// pol commit rw_reg[6];
10+
// pol commit mem_tag_reg[6];
11+
// pol commit sel_tag_check_reg[6];
12+
// pol commit expected_tag_reg[6];
1313
//
1414
// pol commit sel_should_read_registers; // Register read temporality group.
1515
// pol commit sel_should_write_registers; // Register write temporality group.
@@ -46,8 +46,6 @@ sel_op_reg_effective[3] = sel_mem_op_reg[3] * (sel_should_read_registers * (1 -
4646
sel_op_reg_effective[4] = sel_mem_op_reg[4] * (sel_should_read_registers * (1 - rw_reg[4]) + sel_should_write_registers * rw_reg[4]);
4747
#[SEL_OP_REG_EFFECTIVE_5]
4848
sel_op_reg_effective[5] = sel_mem_op_reg[5] * (sel_should_read_registers * (1 - rw_reg[5]) + sel_should_write_registers * rw_reg[5]);
49-
#[SEL_OP_REG_EFFECTIVE_6]
50-
sel_op_reg_effective[6] = sel_mem_op_reg[6] * (sel_should_read_registers * (1 - rw_reg[6]) + sel_should_write_registers * rw_reg[6]);
5149

5250
// Observe that the following permutations span both temporality groups.
5351
// That's why we have to properly activate them with the above selectors, which take into account
@@ -70,9 +68,6 @@ is memory.sel_register_op[4] { memory.clk, memory.space_id, memory.address,
7068
#[MEM_OP_5]
7169
sel_op_reg_effective[5] { precomputed.clk, context_id, rop[5], register[5], mem_tag_reg[5], rw_reg[5] }
7270
is memory.sel_register_op[5] { memory.clk, memory.space_id, memory.address, memory.value, memory.tag, memory.rw };
73-
#[MEM_OP_6]
74-
sel_op_reg_effective[6] { precomputed.clk, context_id, rop[6], register[6], mem_tag_reg[6], rw_reg[6] }
75-
is memory.sel_register_op[6] { memory.clk, memory.space_id, memory.address, memory.value, memory.tag, memory.rw };
7671

7772
// This error is true iff some final check failed. That is if some tag is not the expected one.
7873
// Observe that we don't need to know exactly which one failed.
@@ -89,8 +84,7 @@ pol BATCHED_TAGS_DIFF_REG = sel_tag_check_reg[0] * 2**0 * (mem_tag_reg[0] - exp
8984
+ sel_tag_check_reg[2] * 2**6 * (mem_tag_reg[2] - expected_tag_reg[2])
9085
+ sel_tag_check_reg[3] * 2**9 * (mem_tag_reg[3] - expected_tag_reg[3])
9186
+ sel_tag_check_reg[4] * 2**12 * (mem_tag_reg[4] - expected_tag_reg[4])
92-
+ sel_tag_check_reg[5] * 2**15 * (mem_tag_reg[5] - expected_tag_reg[5])
93-
+ sel_tag_check_reg[6] * 2**18 * (mem_tag_reg[6] - expected_tag_reg[6]);
87+
+ sel_tag_check_reg[5] * 2**15 * (mem_tag_reg[5] - expected_tag_reg[5]);
9488
pol commit batched_tags_diff_inv_reg;
9589
pol BATCHED_TAGS_DIFF_X_REG = sel_should_read_registers * BATCHED_TAGS_DIFF_REG; // Forces 0 if we don't read the register.
9690
pol BATCHED_TAGS_DIFF_Y_REG = batched_tags_diff_inv_reg;

barretenberg/cpp/pil/vm2/keccak_memory.pil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ pol commit ctr_end;
130130
ctr_end * (1 - ctr_end) = 0;
131131

132132
// We define ctr_end == 1 <==> ctr == AVM_KECCAKF1600_STATE_SIZE (25)
133-
pol commit ctr_min_state_size_inv;
133+
pol commit state_size_min_ctr_inv;
134134
#[CTR_END]
135-
sel * ((ctr - constants.AVM_KECCAKF1600_STATE_SIZE) * (ctr_end * (1 - ctr_min_state_size_inv) + ctr_min_state_size_inv) + ctr_end - 1) = 0;
135+
sel * ((constants.AVM_KECCAKF1600_STATE_SIZE - ctr) * (ctr_end * (1 - state_size_min_ctr_inv) + state_size_min_ctr_inv) + ctr_end - 1) = 0;
136136

137137
// Last ctr of a multi-rows processing of a slice
138138
pol commit last;

barretenberg/cpp/pil/vm2/precomputed.pil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,11 @@ pol constant exec_opcode_base_da_gas;
118118
pol constant exec_opcode_dynamic_l2_gas;
119119
pol constant exec_opcode_dynamic_da_gas;
120120
// Registers: Memory Access
121-
pol constant sel_mem_op_reg[7];
122-
pol constant rw_reg[7];
121+
pol constant sel_mem_op_reg[6];
122+
pol constant rw_reg[6];
123123
// Registers: Tag Check
124-
pol constant sel_tag_check_reg[7];
125-
pol constant expected_tag_reg[7];
124+
pol constant sel_tag_check_reg[6];
125+
pol constant expected_tag_reg[6];
126126
// Decomposed Subtrace/Gadget Selector
127127
pol constant dyn_gas_id;
128128
pol constant subtrace_id;

barretenberg/cpp/src/barretenberg/vm2/common/aztec_constants.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@
175175
#define AVM_MAX_PROCESSABLE_L2_GAS 6000000
176176
#define AVM_PC_SIZE_IN_BITS 32
177177
#define AVM_MAX_OPERANDS 7
178-
#define AVM_MAX_REGISTERS 7
178+
#define AVM_MAX_REGISTERS 6
179179
#define AVM_ADDRESSING_BASE_RESOLUTION_L2_GAS 3
180180
#define AVM_ADDRESSING_INDIRECT_L2_GAS 3
181181
#define AVM_ADDRESSING_RELATIVE_L2_GAS 3

0 commit comments

Comments
 (0)