diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.cpp index 1e4c07edf775..53828200a6e9 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.cpp @@ -1,10 +1,16 @@ #include "barretenberg/vm2/tracegen/address_derivation_trace.hpp" +#include + #include "barretenberg/vm2/common/aztec_constants.hpp" #include "barretenberg/vm2/common/aztec_types.hpp" #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/generated/relations/lookups_address_derivation.hpp" #include "barretenberg/vm2/simulation/events/address_derivation_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" #include "barretenberg/vm2/tracegen/trace_container.hpp" namespace bb::avm2::tracegen { @@ -51,4 +57,28 @@ void AddressDerivationTraceBuilder::process( } } +std::vector> AddressDerivationTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.hpp index e86ddc8a4206..ac54bb2dabbe 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/address_derivation_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" @@ -11,6 +13,8 @@ class AddressDerivationTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.cpp index e9ee7fbe35ca..8ced4a393a53 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.cpp @@ -2,12 +2,18 @@ #include #include +#include #include #include #include "barretenberg/vm2/common/memory_types.hpp" +#include "barretenberg/vm2/generated/relations/lookups_bitwise.hpp" #include "barretenberg/vm2/simulation/events/bitwise_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_bitwise.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -60,4 +66,11 @@ void BitwiseTraceBuilder::process(const simulation::EventEmitterInterface> BitwiseTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.hpp index 0972a5d2b85a..1b241e87d31e 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/bitwise_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" @@ -11,6 +13,8 @@ class BitwiseTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; -} // namespace bb::avm2::tracegen \ No newline at end of file +} // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.cpp index ba40feb8fe31..7f9c5ea1eff7 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -10,8 +11,15 @@ #include "barretenberg/crypto/poseidon2/poseidon2.hpp" #include "barretenberg/vm2/common/aztec_constants.hpp" #include "barretenberg/vm2/common/instruction_spec.hpp" +#include "barretenberg/vm2/generated/relations/lookups_bc_decomposition.hpp" +#include "barretenberg/vm2/generated/relations/lookups_bc_hashing.hpp" +#include "barretenberg/vm2/generated/relations/lookups_bc_retrieval.hpp" +#include "barretenberg/vm2/generated/relations/lookups_instr_fetching.hpp" #include "barretenberg/vm2/simulation/events/bytecode_events.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" #include "barretenberg/vm2/tracegen/precomputed_trace.hpp" using Poseidon2 = bb::crypto::Poseidon2; @@ -370,4 +378,31 @@ void BytecodeTraceBuilder::process_instruction_fetching( } } +std::vector> BytecodeTraceBuilder::lookup_jobs() +{ + return make_jobs>( + // Bytecode Hashing + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + // Bytecode Retrieval + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique>(), + // Bytecode Decomposition + std::make_unique>(), + std::make_unique>(), + // Instruction Fetching + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.hpp index 1f8a0e227421..5ce56ec45a04 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/bytecode_events.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" @@ -25,6 +27,8 @@ class BytecodeTraceBuilder final { void process_instruction_fetching( const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; -} // namespace bb::avm2::tracegen \ No newline at end of file +} // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.cpp index d4410e8c663a..af6c1cb5796d 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.cpp @@ -1,8 +1,14 @@ #include "barretenberg/vm2/tracegen/class_id_derivation_trace.hpp" +#include + #include "barretenberg/vm2/common/aztec_constants.hpp" +#include "barretenberg/vm2/generated/relations/lookups_class_id_derivation.hpp" #include "barretenberg/vm2/simulation/events/class_id_derivation_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" #include "barretenberg/vm2/tracegen/trace_container.hpp" namespace bb::avm2::tracegen { @@ -29,4 +35,11 @@ void ClassIdDerivationTraceBuilder::process( row++; } } + +std::vector> ClassIdDerivationTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>()); +} } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.hpp index de61f0378f76..1696b29c4870 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/class_id_derivation_event.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" @@ -11,6 +13,8 @@ class ClassIdDerivationTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.cpp index 64d63f9410cd..851aadf82feb 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.cpp @@ -1,11 +1,16 @@ #include "barretenberg/vm2/tracegen/ecc_trace.hpp" #include +#include #include "barretenberg/vm2/common/aztec_types.hpp" #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/generated/relations/lookups_scalar_mul.hpp" #include "barretenberg/vm2/simulation/events/ecc_events.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -153,4 +158,12 @@ void EccTraceBuilder::process_scalar_mul( } } +std::vector> EccTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.hpp index f776a60ed1ba..0e78462cae41 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/ecc_events.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" @@ -13,6 +15,8 @@ class EccTraceBuilder final { TraceContainer& trace); void process_scalar_mul(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.cpp index a50755b60675..f34c6589237a 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.cpp @@ -1,6 +1,13 @@ #include "barretenberg/vm2/tracegen/field_gt_trace.hpp" + +#include + #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/generated/relations/lookups_ff_gt.hpp" #include "barretenberg/vm2/simulation/lib/u256_decomposition.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -76,4 +83,11 @@ void FieldGreaterThanTraceBuilder::process( } } +std::vector> FieldGreaterThanTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.hpp index be8b16ea5d05..53ba4d0ac5e8 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/field_gt_event.hpp" @@ -11,6 +13,8 @@ class FieldGreaterThanTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/interaction_builder.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/interaction_builder.hpp index 08bc43a5a90c..c9c16eafc422 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/interaction_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/interaction_builder.hpp @@ -20,4 +20,4 @@ template void SetDummyInverses(TraceContainer& trace) [&](uint32_t row, const FF&) { trace.set(LookupSettings::INVERSES, row, 0xdeadbeef); }); } -} // namespace bb::avm2::tracegen \ No newline at end of file +} // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/make_jobs.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/make_jobs.hpp new file mode 100644 index 000000000000..0f097580e70f --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/make_jobs.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +namespace bb::avm2::tracegen { + +// Helper function to create a vector of unique_ptrs. +template std::vector make_jobs(Ts&&... args) +{ + std::vector jobs; + jobs.reserve(sizeof...(Ts)); + (jobs.push_back(std::move(args)), ...); + return jobs; +} + +} // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.cpp index df7a498e5674..3b61f0d3dce2 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.cpp @@ -1,8 +1,13 @@ #include +#include #include "barretenberg/crypto/poseidon2/poseidon2.hpp" +#include "barretenberg/vm2/generated/relations/lookups_merkle_check.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/merkle_check_event.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" #include "barretenberg/vm2/tracegen/merkle_check_trace.hpp" namespace bb::avm2::tracegen { @@ -89,4 +94,11 @@ void MerkleCheckTraceBuilder::process( } } +std::vector> MerkleCheckTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.hpp index ebd4a9a050c3..db6fbbf95f0a 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/merkle_check_event.hpp" @@ -11,6 +13,8 @@ class MerkleCheckTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.cpp index 5429436b4d47..fa634dccfe18 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.cpp @@ -1,6 +1,13 @@ #include "barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp" +#include + #include "barretenberg/vm2/common/aztec_constants.hpp" +#include "barretenberg/vm2/generated/relations/lookups_nullifier_check.hpp" +#include "barretenberg/vm2/generated/relations/lookups_update_check.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -70,4 +77,20 @@ void NullifierTreeCheckTraceBuilder::process( } } +std::vector> NullifierTreeCheckTraceBuilder::lookup_jobs() +{ + return make_jobs>( + // Nullifier check + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp index f18c3e91659e..b493a3fac55e 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/nullifier_tree_check_event.hpp" @@ -11,6 +13,8 @@ class NullifierTreeCheckTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.cpp index 1c719d1a665a..a1855f7ed516 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.cpp @@ -1,11 +1,16 @@ #include "barretenberg/vm2/tracegen/poseidon2_trace.hpp" #include +#include #include "barretenberg/crypto/poseidon2/poseidon2_permutation.hpp" #include "barretenberg/ecc/fields/field_declarations.hpp" +#include "barretenberg/vm2/generated/relations/lookups_poseidon2_hash.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/poseidon2_event.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" using Poseidon2Perm = bb::crypto::Poseidon2Permutation; @@ -425,4 +430,10 @@ void Poseidon2TraceBuilder::process_permutation( } } +std::vector> Poseidon2TraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.hpp index dfc9ca14f857..4eb5143e8f25 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/poseidon2_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/poseidon2_event.hpp" @@ -14,6 +16,8 @@ class Poseidon2TraceBuilder final { void process_permutation( const simulation::EventEmitterInterface::Container& perm_events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.cpp index 94cf70198fcc..8ad39003f816 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.cpp @@ -1,6 +1,12 @@ #include "barretenberg/vm2/tracegen/public_data_tree_read_trace.hpp" +#include + #include "barretenberg/vm2/common/aztec_constants.hpp" +#include "barretenberg/vm2/generated/relations/lookups_public_data_read.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -44,4 +50,15 @@ void PublicDataTreeReadTraceBuilder::process( } } +std::vector> PublicDataTreeReadTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.hpp index 665fc64563e8..f0aa61ae38be 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/public_data_tree_read_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/public_data_tree_read_event.hpp" @@ -11,6 +13,8 @@ class PublicDataTreeReadTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.cpp index 4c013e94c89f..e92d2f106bdb 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.cpp @@ -2,11 +2,16 @@ #include #include +#include #include #include +#include "barretenberg/vm2/generated/relations/lookups_range_check.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/range_check_event.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -90,4 +95,19 @@ void RangeCheckTraceBuilder::process( } } +std::vector> RangeCheckTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.hpp index 99c9177d36e7..9de27acd89dc 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/range_check_event.hpp" @@ -11,6 +13,8 @@ class RangeCheckTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.cpp index 2866326febf9..d8b513a30640 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.cpp @@ -3,11 +3,16 @@ #include #include #include +#include #include #include +#include "barretenberg/vm2/generated/relations/lookups_sha256.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/sha256_event.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -348,4 +353,10 @@ void Sha256TraceBuilder::process( } } +std::vector> Sha256TraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.hpp index 8608794cfb65..e750415f3e46 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/sha256_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/sha256_event.hpp" @@ -13,6 +15,7 @@ class Sha256TraceBuilder final { : trace(trace) {} void process(const simulation::EventEmitterInterface::Container& events); + static std::vector> lookup_jobs(); private: uint32_t row = 1; // Start from 1 to avoid the precomputed row. diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.cpp index c7c70c399f04..16275303275d 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.cpp @@ -1,12 +1,18 @@ #include "barretenberg/vm2/tracegen/to_radix_trace.hpp" #include +#include #include "barretenberg/numeric/uint256/uint256.hpp" #include "barretenberg/vm2/common/aztec_types.hpp" #include "barretenberg/vm2/common/to_radix.hpp" +#include "barretenberg/vm2/generated/relations/lookups_to_radix.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/to_radix_event.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_into_p_decomposition.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -85,4 +91,14 @@ void ToRadixTraceBuilder::process(const simulation::EventEmitterInterface> ToRadixTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.hpp index 16d5dd5c5502..48abaaf4ea6e 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/to_radix_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/to_radix_event.hpp" @@ -11,6 +13,8 @@ class ToRadixTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.cpp index 1f791dfebeb8..a8373bbfab9a 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.cpp @@ -1,6 +1,12 @@ #include "barretenberg/vm2/tracegen/update_check_trace.hpp" +#include + #include "barretenberg/vm2/common/aztec_constants.hpp" +#include "barretenberg/vm2/generated/relations/lookups_update_check.hpp" +#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" +#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp" namespace bb::avm2::tracegen { @@ -65,4 +71,18 @@ void UpdateCheckTraceBuilder::process( } } +std::vector> UpdateCheckTraceBuilder::lookup_jobs() +{ + return make_jobs>( + std::make_unique>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique< + LookupIntoDynamicTableSequential>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>(), + std::make_unique>()); +} + } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.hpp index 2a79cbb7843e..1702de958e19 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/update_check_trace.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/simulation/events/event_emitter.hpp" #include "barretenberg/vm2/simulation/events/update_check.hpp" @@ -11,6 +13,8 @@ class UpdateCheckTraceBuilder final { public: void process(const simulation::EventEmitterInterface::Container& events, TraceContainer& trace); + + static std::vector> lookup_jobs(); }; } // namespace bb::avm2::tracegen diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen_helper.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen_helper.cpp index 0706ae70f23e..5b2ae5f1b506 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen_helper.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen_helper.cpp @@ -13,34 +13,16 @@ #include "barretenberg/vm2/common/map.hpp" #include "barretenberg/vm2/constraining/flavor.hpp" #include "barretenberg/vm2/generated/columns.hpp" -#include "barretenberg/vm2/generated/relations/lookups_address_derivation.hpp" -#include "barretenberg/vm2/generated/relations/lookups_bc_decomposition.hpp" -#include "barretenberg/vm2/generated/relations/lookups_bc_retrieval.hpp" -#include "barretenberg/vm2/generated/relations/lookups_bitwise.hpp" -#include "barretenberg/vm2/generated/relations/lookups_class_id_derivation.hpp" -#include "barretenberg/vm2/generated/relations/lookups_instr_fetching.hpp" -#include "barretenberg/vm2/generated/relations/lookups_merkle_check.hpp" -#include "barretenberg/vm2/generated/relations/lookups_poseidon2_hash.hpp" -#include "barretenberg/vm2/generated/relations/lookups_public_data_read.hpp" -#include "barretenberg/vm2/generated/relations/lookups_range_check.hpp" -#include "barretenberg/vm2/generated/relations/lookups_scalar_mul.hpp" -#include "barretenberg/vm2/generated/relations/lookups_sha256.hpp" -#include "barretenberg/vm2/generated/relations/lookups_to_radix.hpp" -#include "barretenberg/vm2/generated/relations/lookups_update_check.hpp" #include "barretenberg/vm2/tooling/stats.hpp" #include "barretenberg/vm2/tracegen/address_derivation_trace.hpp" #include "barretenberg/vm2/tracegen/alu_trace.hpp" +#include "barretenberg/vm2/tracegen/bitwise_trace.hpp" #include "barretenberg/vm2/tracegen/bytecode_trace.hpp" #include "barretenberg/vm2/tracegen/class_id_derivation_trace.hpp" #include "barretenberg/vm2/tracegen/ecc_trace.hpp" #include "barretenberg/vm2/tracegen/execution_trace.hpp" #include "barretenberg/vm2/tracegen/field_gt_trace.hpp" #include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp" -#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp" -#include "barretenberg/vm2/tracegen/lib/lookup_into_bitwise.hpp" -#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp" -#include "barretenberg/vm2/tracegen/lib/lookup_into_p_decomposition.hpp" -#include "barretenberg/vm2/tracegen/lib/permutation_builder.hpp" #include "barretenberg/vm2/tracegen/merkle_check_trace.hpp" #include "barretenberg/vm2/tracegen/nullifier_tree_check_trace.hpp" #include "barretenberg/vm2/tracegen/poseidon2_trace.hpp" @@ -96,15 +78,6 @@ void execute_jobs(std::span> jobs) parallel_for(jobs.size(), [&](size_t i) { jobs[i](); }); } -// We need this to be able to make a vector of unique_ptrs. -template std::vector make_jobs(Ts&&... args) -{ - std::vector jobs; - jobs.reserve(sizeof...(Ts)); - (jobs.push_back(std::move(args)), ...); - return jobs; -} - template inline void clear_events(T& c) { c.clear(); @@ -166,6 +139,15 @@ void check_interactions([[maybe_unused]] const TraceContainer& trace) #endif } +// A concatenate that works with movable objects. +template std::vector concatenate_jobs(std::vector&& first, auto&&... rest) +{ + std::vector result = std::move(first); + result.reserve(first.size() + (rest.size() + ...)); + (std::move(rest.begin(), rest.end(), std::back_inserter(result)), ...); + return result; +} + } // namespace TraceContainer AvmTraceGenHelper::generate_trace(EventsContainer&& events) @@ -297,126 +279,20 @@ TraceContainer AvmTraceGenHelper::generate_trace(EventsContainer&& events) // Now we can compute lookups and permutations. { - auto jobs_interactions = make_jobs>( - // Poseidon2 - std::make_unique>(), - // Range Check - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // Bitwise - std::make_unique>(), - std::make_unique>(), - // SHA-256 - std::make_unique>(), - // Bytecode Hashing - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // Bytecode Retrieval - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - // Bytecode Decomposition - std::make_unique>(), - std::make_unique>(), - // Instruction Fetching - // TODO: Define another flavor for LookupIntoDynamicTableGeneric which takes only a prefix of the tuple - // as key. This would lower memory and potentially a short speed-up. Here, the two first elements - // (pc, bytecode_id) would define a unique key which is much shorter than this tuple which is about - // 40 elements long. - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // Class Id Derivation - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - // Scalar mul - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // To radix - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // Address derivation - std::make_unique>(), - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique>(), - // Field GT - std::make_unique>(), - std::make_unique>(), - // Merkle checks - std::make_unique>(), - std::make_unique>(), - // Public data read - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - // Update check - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique>(), - std::make_unique>(), - std::make_unique>(), - // Nullifier check - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique< - LookupIntoDynamicTableSequential>(), - std::make_unique>(), - std::make_unique< - LookupIntoDynamicTableSequential>()); + auto jobs_interactions = concatenate_jobs(Poseidon2TraceBuilder::lookup_jobs(), + RangeCheckTraceBuilder::lookup_jobs(), + BitwiseTraceBuilder::lookup_jobs(), + Sha256TraceBuilder::lookup_jobs(), + BytecodeTraceBuilder::lookup_jobs(), + ClassIdDerivationTraceBuilder::lookup_jobs(), + EccTraceBuilder::lookup_jobs(), + ToRadixTraceBuilder::lookup_jobs(), + AddressDerivationTraceBuilder::lookup_jobs(), + FieldGreaterThanTraceBuilder::lookup_jobs(), + MerkleCheckTraceBuilder::lookup_jobs(), + PublicDataTreeReadTraceBuilder::lookup_jobs(), + UpdateCheckTraceBuilder::lookup_jobs(), + NullifierTreeCheckTraceBuilder::lookup_jobs()); AVM_TRACK_TIME("tracegen/interactions", parallel_for(jobs_interactions.size(), [&](size_t i) { jobs_interactions[i]->process(trace); }));