diff --git a/barretenberg/cpp/src/barretenberg/common/thread.hpp b/barretenberg/cpp/src/barretenberg/common/thread.hpp index 77309cd9098..98ade3f4593 100644 --- a/barretenberg/cpp/src/barretenberg/common/thread.hpp +++ b/barretenberg/cpp/src/barretenberg/common/thread.hpp @@ -19,6 +19,13 @@ inline size_t get_num_cpus_pow2() return static_cast(1ULL << numeric::get_msb(get_num_cpus())); } +/** + * Creates a thread pool and runs the function in parallel. + * @param num_iterations Number of iterations + * @param func Function to run in parallel + * Observe that num_iterations is NOT the thread pool size. + * The size will be chosen based on the hardware concurrency (i.e., env or cpus).. + */ void parallel_for(size_t num_iterations, const std::function& func); void run_loop_in_parallel(size_t num_points, const std::function& func, @@ -30,7 +37,7 @@ template void run_loop_in_parallel_if_effective_internal( size_t, const FunctionType&, size_t, size_t, size_t, size_t, size_t, size_t, size_t); /** - * @brief Runs loop in parallel if parallelization if useful (costs less than the algorith) + * @brief Runs loop in parallel if parallelization if useful (costs less than the algorithm) * * @details Please see run_loop_in_parallel_if_effective_internal for detailed description * diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/alu.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/alu.hpp index fad6d633073..f1f8714e80a 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/alu.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/alu.hpp @@ -129,105 +129,6 @@ template struct AluRow { FF alu_u8_tag{}; }; -inline std::string get_relation_label_alu(int index) -{ - switch (index) { - case 12: - return "ALU_ADD_SUB_1"; - case 13: - return "ALU_ADD_SUB_2"; - case 14: - return "ALU_MULTIPLICATION_FF"; - case 15: - return "ALU_MUL_COMMON_1"; - case 16: - return "ALU_MUL_COMMON_2"; - case 19: - return "ALU_MULTIPLICATION_OUT_U128"; - case 20: - return "ALU_FF_NOT_XOR"; - case 21: - return "ALU_OP_NOT"; - case 22: - return "ALU_RES_IS_BOOL"; - case 23: - return "ALU_OP_EQ"; - case 24: - return "INPUT_DECOMP_1"; - case 25: - return "INPUT_DECOMP_2"; - case 27: - return "SUB_LO_1"; - case 28: - return "SUB_HI_1"; - case 30: - return "SUB_LO_2"; - case 31: - return "SUB_HI_2"; - case 32: - return "RES_LO"; - case 33: - return "RES_HI"; - case 34: - return "CMP_CTR_REL_1"; - case 35: - return "CMP_CTR_REL_2"; - case 38: - return "CTR_NON_ZERO_REL"; - case 39: - return "RNG_CHK_LOOKUP_SELECTOR"; - case 40: - return "LOWER_CMP_RNG_CHK"; - case 41: - return "UPPER_CMP_RNG_CHK"; - case 42: - return "SHIFT_RELS_0"; - case 44: - return "SHIFT_RELS_1"; - case 46: - return "SHIFT_RELS_2"; - case 48: - return "SHIFT_RELS_3"; - case 50: - return "OP_CAST_PREV_LINE"; - case 51: - return "ALU_OP_CAST"; - case 52: - return "OP_CAST_RNG_CHECK_P_SUB_A_LOW"; - case 53: - return "OP_CAST_RNG_CHECK_P_SUB_A_HIGH"; - case 54: - return "TWO_LINE_OP_NO_OVERLAP"; - case 55: - return "SHR_RANGE_0"; - case 56: - return "SHR_RANGE_1"; - case 57: - return "SHL_RANGE_0"; - case 58: - return "SHL_RANGE_1"; - case 60: - return "SHIFT_LT_BIT_LEN"; - case 61: - return "SHR_INPUT_DECOMPOSITION"; - case 62: - return "SHR_OUTPUT"; - case 63: - return "SHL_INPUT_DECOMPOSITION"; - case 64: - return "SHL_OUTPUT"; - case 74: - return "ALU_PROD_DIV"; - case 75: - return "REMAINDER_RANGE_CHK"; - case 76: - return "CMP_CTR_REL_3"; - case 78: - return "DIVISION_RELATION"; - } - return std::to_string(index); -} - template class aluImpl { public: using FF = FF_; @@ -1040,6 +941,108 @@ template class aluImpl { } }; -template using alu = Relation>; +template class alu : public Relation> { + public: + static constexpr const char* NAME = "alu"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 12: + return "ALU_ADD_SUB_1"; + case 13: + return "ALU_ADD_SUB_2"; + case 14: + return "ALU_MULTIPLICATION_FF"; + case 15: + return "ALU_MUL_COMMON_1"; + case 16: + return "ALU_MUL_COMMON_2"; + case 19: + return "ALU_MULTIPLICATION_OUT_U128"; + case 20: + return "ALU_FF_NOT_XOR"; + case 21: + return "ALU_OP_NOT"; + case 22: + return "ALU_RES_IS_BOOL"; + case 23: + return "ALU_OP_EQ"; + case 24: + return "INPUT_DECOMP_1"; + case 25: + return "INPUT_DECOMP_2"; + case 27: + return "SUB_LO_1"; + case 28: + return "SUB_HI_1"; + case 30: + return "SUB_LO_2"; + case 31: + return "SUB_HI_2"; + case 32: + return "RES_LO"; + case 33: + return "RES_HI"; + case 34: + return "CMP_CTR_REL_1"; + case 35: + return "CMP_CTR_REL_2"; + case 38: + return "CTR_NON_ZERO_REL"; + case 39: + return "RNG_CHK_LOOKUP_SELECTOR"; + case 40: + return "LOWER_CMP_RNG_CHK"; + case 41: + return "UPPER_CMP_RNG_CHK"; + case 42: + return "SHIFT_RELS_0"; + case 44: + return "SHIFT_RELS_1"; + case 46: + return "SHIFT_RELS_2"; + case 48: + return "SHIFT_RELS_3"; + case 50: + return "OP_CAST_PREV_LINE"; + case 51: + return "ALU_OP_CAST"; + case 52: + return "OP_CAST_RNG_CHECK_P_SUB_A_LOW"; + case 53: + return "OP_CAST_RNG_CHECK_P_SUB_A_HIGH"; + case 54: + return "TWO_LINE_OP_NO_OVERLAP"; + case 55: + return "SHR_RANGE_0"; + case 56: + return "SHR_RANGE_1"; + case 57: + return "SHL_RANGE_0"; + case 58: + return "SHL_RANGE_1"; + case 60: + return "SHIFT_LT_BIT_LEN"; + case 61: + return "SHR_INPUT_DECOMPOSITION"; + case 62: + return "SHR_OUTPUT"; + case 63: + return "SHL_INPUT_DECOMPOSITION"; + case 64: + return "SHL_OUTPUT"; + case 74: + return "ALU_PROD_DIV"; + case 75: + return "REMAINDER_RANGE_CHK"; + case 76: + return "CMP_CTR_REL_3"; + case 78: + return "DIVISION_RELATION"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/binary.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/binary.hpp index c5617ceaafd..dc0f110e875 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/binary.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/binary.hpp @@ -24,25 +24,6 @@ template struct BinaryRow { FF binary_sel_bin{}; }; -inline std::string get_relation_label_binary(int index) -{ - switch (index) { - case 1: - return "OP_ID_REL"; - case 2: - return "MEM_TAG_REL"; - case 3: - return "SEL_BIN_CTR_REL"; - case 7: - return "ACC_REL_A"; - case 8: - return "ACC_REL_B"; - case 9: - return "ACC_REL_C"; - } - return std::to_string(index); -} - template class binaryImpl { public: using FF = FF_; @@ -128,6 +109,28 @@ template class binaryImpl { } }; -template using binary = Relation>; +template class binary : public Relation> { + public: + static constexpr const char* NAME = "binary"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 1: + return "OP_ID_REL"; + case 2: + return "MEM_TAG_REL"; + case 3: + return "SEL_BIN_CTR_REL"; + case 7: + return "ACC_REL_A"; + case 8: + return "ACC_REL_B"; + case 9: + return "ACC_REL_C"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/conversion.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/conversion.hpp index 0874c9ca4c4..759f82b4fbf 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/conversion.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/conversion.hpp @@ -10,12 +10,6 @@ template struct ConversionRow { FF conversion_sel_to_radix_le{}; }; -inline std::string get_relation_label_conversion(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class conversionImpl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class conversionImpl { } }; -template using conversion = Relation>; +template class conversion : public Relation> { + public: + static constexpr const char* NAME = "conversion"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/gas.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/gas.hpp index 69db48e9f5c..c5779ccb6e6 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/gas.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/gas.hpp @@ -12,12 +12,6 @@ template struct GasRow { FF gas_sel_gas_cost{}; }; -inline std::string get_relation_label_gas(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class gasImpl { public: using FF = FF_; @@ -51,6 +45,15 @@ template class gasImpl { } }; -template using gas = Relation>; +template class gas : public Relation> { + public: + static constexpr const char* NAME = "gas"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_main_tag_err.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_main_tag_err.hpp index 6cfb74059d9..4b6eab5c924 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_main_tag_err.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_main_tag_err.hpp @@ -56,7 +56,7 @@ class incl_main_tag_err_lookup_settings { template class incl_main_tag_err_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "incl_main_tag_err"; + static constexpr const char* NAME = "INCL_MAIN_TAG_ERR"; }; template using incl_main_tag_err = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_mem_tag_err.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_mem_tag_err.hpp index a3c55ff966b..04cfbb2e754 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_mem_tag_err.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/incl_mem_tag_err.hpp @@ -48,7 +48,7 @@ class incl_mem_tag_err_lookup_settings { template class incl_mem_tag_err_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "incl_mem_tag_err"; + static constexpr const char* NAME = "INCL_MEM_TAG_ERR"; }; template using incl_mem_tag_err = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/keccakf1600.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/keccakf1600.hpp index e672cc8959a..df3f032d111 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/keccakf1600.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/keccakf1600.hpp @@ -10,12 +10,6 @@ template struct Keccakf1600Row { FF keccakf1600_sel_keccakf1600{}; }; -inline std::string get_relation_label_keccakf1600(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class keccakf1600Impl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class keccakf1600Impl { } }; -template using keccakf1600 = Relation>; +template class keccakf1600 : public Relation> { + public: + static constexpr const char* NAME = "keccakf1600"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel.hpp index affb1c4254a..9d4d2f1f9ce 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel.hpp @@ -40,33 +40,6 @@ template struct KernelRow { FF main_sel_op_sstore{}; }; -inline std::string get_relation_label_kernel(int index) -{ - switch (index) { - case 0: - return "NOTE_HASH_EXISTS_INC_CONSISTENCY_CHECK"; - case 1: - return "EMIT_NOTE_HASH_INC_CONSISTENCY_CHECK"; - case 2: - return "NULLIFIER_EXISTS_INC_CONSISTENCY_CHECK"; - case 3: - return "NULLIFIER_NON_EXISTS_INC_CONSISTENCY_CHECK"; - case 4: - return "EMIT_NULLIFIER_INC_CONSISTENCY_CHECK"; - case 5: - return "L1_TO_L2_MSG_EXISTS_INC_CONSISTENCY_CHECK"; - case 6: - return "EMIT_UNENCRYPTED_LOG_INC_CONSISTENCY_CHECK"; - case 7: - return "EMIT_L2_TO_L1_MSG_INC_CONSISTENCY_CHECK"; - case 8: - return "SLOAD_INC_CONSISTENCY_CHECK"; - case 9: - return "SSTORE_INC_CONSISTENCY_CHECK"; - } - return std::to_string(index); -} - template class kernelImpl { public: using FF = FF_; @@ -166,6 +139,36 @@ template class kernelImpl { } }; -template using kernel = Relation>; +template class kernel : public Relation> { + public: + static constexpr const char* NAME = "kernel"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 0: + return "NOTE_HASH_EXISTS_INC_CONSISTENCY_CHECK"; + case 1: + return "EMIT_NOTE_HASH_INC_CONSISTENCY_CHECK"; + case 2: + return "NULLIFIER_EXISTS_INC_CONSISTENCY_CHECK"; + case 3: + return "NULLIFIER_NON_EXISTS_INC_CONSISTENCY_CHECK"; + case 4: + return "EMIT_NULLIFIER_INC_CONSISTENCY_CHECK"; + case 5: + return "L1_TO_L2_MSG_EXISTS_INC_CONSISTENCY_CHECK"; + case 6: + return "EMIT_UNENCRYPTED_LOG_INC_CONSISTENCY_CHECK"; + case 7: + return "EMIT_L2_TO_L1_MSG_INC_CONSISTENCY_CHECK"; + case 8: + return "SLOAD_INC_CONSISTENCY_CHECK"; + case 9: + return "SSTORE_INC_CONSISTENCY_CHECK"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel_output_lookup.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel_output_lookup.hpp index d432d46bc2c..797627d4abe 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel_output_lookup.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/kernel_output_lookup.hpp @@ -68,7 +68,7 @@ class kernel_output_lookup_lookup_settings { template class kernel_output_lookup_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "kernel_output_lookup"; + static constexpr const char* NAME = "KERNEL_OUTPUT_LOOKUP"; }; template using kernel_output_lookup = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_lengths.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_lengths.hpp index 093c0f5b6ea..c9e955f5c5d 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_lengths.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_lengths.hpp @@ -60,7 +60,7 @@ class lookup_byte_lengths_lookup_settings { template class lookup_byte_lengths_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_byte_lengths"; + static constexpr const char* NAME = "LOOKUP_BYTE_LENGTHS"; }; template using lookup_byte_lengths = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_operations.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_operations.hpp index 0961460086e..d75b148d8f8 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_operations.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_byte_operations.hpp @@ -68,7 +68,7 @@ class lookup_byte_operations_lookup_settings { template class lookup_byte_operations_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_byte_operations"; + static constexpr const char* NAME = "LOOKUP_BYTE_OPERATIONS"; }; template using lookup_byte_operations = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_cd_value.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_cd_value.hpp index 86247444cf0..928e027579f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_cd_value.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_cd_value.hpp @@ -60,7 +60,7 @@ class lookup_cd_value_lookup_settings { template class lookup_cd_value_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_cd_value"; + static constexpr const char* NAME = "LOOKUP_CD_VALUE"; }; template using lookup_cd_value = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_0.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_0.hpp index 99c91af7b93..17d91f7a8fb 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_0.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_0.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_0_lookup_settings { template class lookup_div_u16_0_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_0"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_0"; }; template using lookup_div_u16_0 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_1.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_1.hpp index d95c608d0b9..aa75b041c2f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_1.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_1.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_1_lookup_settings { template class lookup_div_u16_1_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_1"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_1"; }; template using lookup_div_u16_1 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_2.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_2.hpp index b1b9036f498..fdbc101c196 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_2.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_2.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_2_lookup_settings { template class lookup_div_u16_2_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_2"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_2"; }; template using lookup_div_u16_2 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_3.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_3.hpp index 56680df40c0..811751452c9 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_3.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_3.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_3_lookup_settings { template class lookup_div_u16_3_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_3"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_3"; }; template using lookup_div_u16_3 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_4.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_4.hpp index 5c02f3c52ca..beccfbfe262 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_4.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_4.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_4_lookup_settings { template class lookup_div_u16_4_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_4"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_4"; }; template using lookup_div_u16_4 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_5.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_5.hpp index b8923c750e5..e3d88dbc9cc 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_5.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_5.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_5_lookup_settings { template class lookup_div_u16_5_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_5"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_5"; }; template using lookup_div_u16_5 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_6.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_6.hpp index a6486bb05ac..71caffd331c 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_6.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_6.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_6_lookup_settings { template class lookup_div_u16_6_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_6"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_6"; }; template using lookup_div_u16_6 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_7.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_7.hpp index c52978bade9..2658b60ad6b 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_7.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_div_u16_7.hpp @@ -56,7 +56,7 @@ class lookup_div_u16_7_lookup_settings { template class lookup_div_u16_7_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_div_u16_7"; + static constexpr const char* NAME = "LOOKUP_DIV_U16_7"; }; template using lookup_div_u16_7 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_into_kernel.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_into_kernel.hpp index 4fe44d760c5..37c92e25584 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_into_kernel.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_into_kernel.hpp @@ -60,7 +60,7 @@ class lookup_into_kernel_lookup_settings { template class lookup_into_kernel_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_into_kernel"; + static constexpr const char* NAME = "LOOKUP_INTO_KERNEL"; }; template using lookup_into_kernel = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_hi.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_hi.hpp index b0db8e3f3a8..3b46f851c31 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_hi.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_hi.hpp @@ -56,7 +56,7 @@ class lookup_mem_rng_chk_hi_lookup_settings { template class lookup_mem_rng_chk_hi_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_mem_rng_chk_hi"; + static constexpr const char* NAME = "LOOKUP_MEM_RNG_CHK_HI"; }; template using lookup_mem_rng_chk_hi = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_lo.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_lo.hpp index 7a0dca83ce3..c16c955dbb1 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_lo.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_lo.hpp @@ -56,7 +56,7 @@ class lookup_mem_rng_chk_lo_lookup_settings { template class lookup_mem_rng_chk_lo_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_mem_rng_chk_lo"; + static constexpr const char* NAME = "LOOKUP_MEM_RNG_CHK_LO"; }; template using lookup_mem_rng_chk_lo = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_mid.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_mid.hpp index e44547863c6..6401efe9a16 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_mid.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_mem_rng_chk_mid.hpp @@ -56,7 +56,7 @@ class lookup_mem_rng_chk_mid_lookup_settings { template class lookup_mem_rng_chk_mid_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_mem_rng_chk_mid"; + static constexpr const char* NAME = "LOOKUP_MEM_RNG_CHK_MID"; }; template using lookup_mem_rng_chk_mid = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_opcode_gas.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_opcode_gas.hpp index a62f68e5b4f..86a5593712a 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_opcode_gas.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_opcode_gas.hpp @@ -64,7 +64,7 @@ class lookup_opcode_gas_lookup_settings { template class lookup_opcode_gas_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_opcode_gas"; + static constexpr const char* NAME = "LOOKUP_OPCODE_GAS"; }; template using lookup_opcode_gas = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_0.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_0.hpp index e9e73ca0b9d..4130b070028 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_0.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_0.hpp @@ -60,7 +60,7 @@ class lookup_pow_2_0_lookup_settings { template class lookup_pow_2_0_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_pow_2_0"; + static constexpr const char* NAME = "LOOKUP_POW_2_0"; }; template using lookup_pow_2_0 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_1.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_1.hpp index 55a5eec29b7..45e2674d889 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_1.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_pow_2_1.hpp @@ -60,7 +60,7 @@ class lookup_pow_2_1_lookup_settings { template class lookup_pow_2_1_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_pow_2_1"; + static constexpr const char* NAME = "LOOKUP_POW_2_1"; }; template using lookup_pow_2_1 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_ret_value.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_ret_value.hpp index 7e341860cb9..e3a5b83ba58 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_ret_value.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_ret_value.hpp @@ -60,7 +60,7 @@ class lookup_ret_value_lookup_settings { template class lookup_ret_value_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_ret_value"; + static constexpr const char* NAME = "LOOKUP_RET_VALUE"; }; template using lookup_ret_value = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_0.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_0.hpp index 70a2e3ac66e..80fb8d8fc1f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_0.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_0.hpp @@ -55,7 +55,7 @@ class lookup_u16_0_lookup_settings { template class lookup_u16_0_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_0"; + static constexpr const char* NAME = "LOOKUP_U16_0"; }; template using lookup_u16_0 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_1.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_1.hpp index e391e04bc72..d21789a78a3 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_1.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_1.hpp @@ -55,7 +55,7 @@ class lookup_u16_1_lookup_settings { template class lookup_u16_1_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_1"; + static constexpr const char* NAME = "LOOKUP_U16_1"; }; template using lookup_u16_1 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_10.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_10.hpp index 1b30139552c..c5c53ca7001 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_10.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_10.hpp @@ -56,7 +56,7 @@ class lookup_u16_10_lookup_settings { template class lookup_u16_10_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_10"; + static constexpr const char* NAME = "LOOKUP_U16_10"; }; template using lookup_u16_10 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_11.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_11.hpp index 860588384db..667d62ee80c 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_11.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_11.hpp @@ -56,7 +56,7 @@ class lookup_u16_11_lookup_settings { template class lookup_u16_11_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_11"; + static constexpr const char* NAME = "LOOKUP_U16_11"; }; template using lookup_u16_11 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_12.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_12.hpp index 0acfe46bc14..b996d90712e 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_12.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_12.hpp @@ -56,7 +56,7 @@ class lookup_u16_12_lookup_settings { template class lookup_u16_12_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_12"; + static constexpr const char* NAME = "LOOKUP_U16_12"; }; template using lookup_u16_12 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_13.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_13.hpp index 87eaa2d6bb1..9a2be9b7a42 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_13.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_13.hpp @@ -56,7 +56,7 @@ class lookup_u16_13_lookup_settings { template class lookup_u16_13_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_13"; + static constexpr const char* NAME = "LOOKUP_U16_13"; }; template using lookup_u16_13 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_14.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_14.hpp index ea9a74cc8d1..41cf86dc012 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_14.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_14.hpp @@ -56,7 +56,7 @@ class lookup_u16_14_lookup_settings { template class lookup_u16_14_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_14"; + static constexpr const char* NAME = "LOOKUP_U16_14"; }; template using lookup_u16_14 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_2.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_2.hpp index 35a34762d1b..591d5569418 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_2.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_2.hpp @@ -55,7 +55,7 @@ class lookup_u16_2_lookup_settings { template class lookup_u16_2_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_2"; + static constexpr const char* NAME = "LOOKUP_U16_2"; }; template using lookup_u16_2 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_3.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_3.hpp index 50284c84860..2a8aa71231f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_3.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_3.hpp @@ -55,7 +55,7 @@ class lookup_u16_3_lookup_settings { template class lookup_u16_3_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_3"; + static constexpr const char* NAME = "LOOKUP_U16_3"; }; template using lookup_u16_3 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_4.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_4.hpp index b5cd10a6670..d8a08585227 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_4.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_4.hpp @@ -55,7 +55,7 @@ class lookup_u16_4_lookup_settings { template class lookup_u16_4_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_4"; + static constexpr const char* NAME = "LOOKUP_U16_4"; }; template using lookup_u16_4 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_5.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_5.hpp index 1f313268b6e..2a5df1d947f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_5.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_5.hpp @@ -55,7 +55,7 @@ class lookup_u16_5_lookup_settings { template class lookup_u16_5_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_5"; + static constexpr const char* NAME = "LOOKUP_U16_5"; }; template using lookup_u16_5 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_6.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_6.hpp index c4aef86a50c..0c3d77a4ba4 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_6.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_6.hpp @@ -55,7 +55,7 @@ class lookup_u16_6_lookup_settings { template class lookup_u16_6_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_6"; + static constexpr const char* NAME = "LOOKUP_U16_6"; }; template using lookup_u16_6 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_7.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_7.hpp index b1496c4403a..58c4b7aaf95 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_7.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_7.hpp @@ -55,7 +55,7 @@ class lookup_u16_7_lookup_settings { template class lookup_u16_7_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_7"; + static constexpr const char* NAME = "LOOKUP_U16_7"; }; template using lookup_u16_7 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_8.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_8.hpp index e2080cc7190..009ba72de36 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_8.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_8.hpp @@ -55,7 +55,7 @@ class lookup_u16_8_lookup_settings { template class lookup_u16_8_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_8"; + static constexpr const char* NAME = "LOOKUP_U16_8"; }; template using lookup_u16_8 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_9.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_9.hpp index 40b258e5942..c1ce89d9253 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_9.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u16_9.hpp @@ -55,7 +55,7 @@ class lookup_u16_9_lookup_settings { template class lookup_u16_9_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u16_9"; + static constexpr const char* NAME = "LOOKUP_U16_9"; }; template using lookup_u16_9 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_0.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_0.hpp index 568ecd3731d..8b73711893c 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_0.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_0.hpp @@ -55,7 +55,7 @@ class lookup_u8_0_lookup_settings { template class lookup_u8_0_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u8_0"; + static constexpr const char* NAME = "LOOKUP_U8_0"; }; template using lookup_u8_0 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_1.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_1.hpp index 3b78d561e68..0f0bad11ee1 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_1.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/lookup_u8_1.hpp @@ -55,7 +55,7 @@ class lookup_u8_1_lookup_settings { template class lookup_u8_1_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "lookup_u8_1"; + static constexpr const char* NAME = "LOOKUP_U8_1"; }; template using lookup_u8_1 = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp index 247a069b9a1..0ad1a01ba60 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp @@ -131,115 +131,6 @@ template struct MainRow { FF main_w_in_tag{}; }; -inline std::string get_relation_label_main(int index) -{ - switch (index) { - case 2: - return "L2_GAS_REMAINING_DECREMENT"; - case 3: - return "DA_GAS_REMAINING_DECREMENT"; - case 4: - return "L2_GAS_INACTIVE"; - case 5: - return "DA_GAS_INACTIVE"; - case 77: - return "OUTPUT_U8"; - case 78: - return "SUBOP_FDIV"; - case 79: - return "SUBOP_FDIV_ZERO_ERR1"; - case 80: - return "SUBOP_FDIV_ZERO_ERR2"; - case 81: - return "SUBOP_FDIV_R_IN_TAG_FF"; - case 82: - return "SUBOP_FDIV_W_IN_TAG_FF"; - case 83: - return "SUBOP_ERROR_RELEVANT_OP"; - case 84: - return "KERNEL_INPUT_ACTIVE_CHECK"; - case 85: - return "KERNEL_OUTPUT_ACTIVE_CHECK"; - case 86: - return "PC_JUMP"; - case 87: - return "PC_JUMPI"; - case 88: - return "RETURN_POINTER_INCREMENT"; - case 94: - return "RETURN_POINTER_DECREMENT"; - case 100: - return "PC_INCREMENT"; - case 101: - return "INTERNAL_RETURN_POINTER_CONSISTENCY"; - case 102: - return "SPACE_ID_INTERNAL"; - case 103: - return "SPACE_ID_STANDARD_OPCODES"; - case 104: - return "CMOV_CONDITION_RES_1"; - case 105: - return "CMOV_CONDITION_RES_2"; - case 108: - return "MOV_SAME_VALUE_A"; - case 109: - return "MOV_SAME_VALUE_B"; - case 110: - return "MOV_MAIN_SAME_TAG"; - case 114: - return "L2GASLEFT"; - case 115: - return "DAGASLEFT"; - case 116: - return "ADDRESS_KERNEL"; - case 117: - return "STORAGE_ADDRESS_KERNEL"; - case 118: - return "SENDER_KERNEL"; - case 119: - return "FUNCTION_SELECTOR_KERNEL"; - case 120: - return "FEE_TRANSACTION_FEE_KERNEL"; - case 121: - return "CHAIN_ID_KERNEL"; - case 122: - return "VERSION_KERNEL"; - case 123: - return "BLOCK_NUMBER_KERNEL"; - case 124: - return "TIMESTAMP_KERNEL"; - case 125: - return "COINBASE_KERNEL"; - case 126: - return "FEE_DA_GAS_KERNEL"; - case 127: - return "FEE_L2_GAS_KERNEL"; - case 128: - return "NOTE_HASH_KERNEL_OUTPUT"; - case 130: - return "EMIT_NOTE_HASH_KERNEL_OUTPUT"; - case 132: - return "NULLIFIER_EXISTS_KERNEL_OUTPUT"; - case 135: - return "EMIT_NULLIFIER_KERNEL_OUTPUT"; - case 137: - return "L1_TO_L2_MSG_EXISTS_KERNEL_OUTPUT"; - case 139: - return "EMIT_UNENCRYPTED_LOG_KERNEL_OUTPUT"; - case 141: - return "EMIT_L2_TO_L1_MSGS_KERNEL_OUTPUT"; - case 143: - return "SLOAD_KERNEL_OUTPUT"; - case 145: - return "SSTORE_KERNEL_OUTPUT"; - case 149: - return "BIN_SEL_1"; - case 150: - return "BIN_SEL_2"; - } - return std::to_string(index); -} - template class mainImpl { public: using FF = FF_; @@ -1373,6 +1264,118 @@ template class mainImpl { } }; -template using main = Relation>; +template class main : public Relation> { + public: + static constexpr const char* NAME = "main"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 2: + return "L2_GAS_REMAINING_DECREMENT"; + case 3: + return "DA_GAS_REMAINING_DECREMENT"; + case 4: + return "L2_GAS_INACTIVE"; + case 5: + return "DA_GAS_INACTIVE"; + case 77: + return "OUTPUT_U8"; + case 78: + return "SUBOP_FDIV"; + case 79: + return "SUBOP_FDIV_ZERO_ERR1"; + case 80: + return "SUBOP_FDIV_ZERO_ERR2"; + case 81: + return "SUBOP_FDIV_R_IN_TAG_FF"; + case 82: + return "SUBOP_FDIV_W_IN_TAG_FF"; + case 83: + return "SUBOP_ERROR_RELEVANT_OP"; + case 84: + return "KERNEL_INPUT_ACTIVE_CHECK"; + case 85: + return "KERNEL_OUTPUT_ACTIVE_CHECK"; + case 86: + return "PC_JUMP"; + case 87: + return "PC_JUMPI"; + case 88: + return "RETURN_POINTER_INCREMENT"; + case 94: + return "RETURN_POINTER_DECREMENT"; + case 100: + return "PC_INCREMENT"; + case 101: + return "INTERNAL_RETURN_POINTER_CONSISTENCY"; + case 102: + return "SPACE_ID_INTERNAL"; + case 103: + return "SPACE_ID_STANDARD_OPCODES"; + case 104: + return "CMOV_CONDITION_RES_1"; + case 105: + return "CMOV_CONDITION_RES_2"; + case 108: + return "MOV_SAME_VALUE_A"; + case 109: + return "MOV_SAME_VALUE_B"; + case 110: + return "MOV_MAIN_SAME_TAG"; + case 114: + return "L2GASLEFT"; + case 115: + return "DAGASLEFT"; + case 116: + return "ADDRESS_KERNEL"; + case 117: + return "STORAGE_ADDRESS_KERNEL"; + case 118: + return "SENDER_KERNEL"; + case 119: + return "FUNCTION_SELECTOR_KERNEL"; + case 120: + return "FEE_TRANSACTION_FEE_KERNEL"; + case 121: + return "CHAIN_ID_KERNEL"; + case 122: + return "VERSION_KERNEL"; + case 123: + return "BLOCK_NUMBER_KERNEL"; + case 124: + return "TIMESTAMP_KERNEL"; + case 125: + return "COINBASE_KERNEL"; + case 126: + return "FEE_DA_GAS_KERNEL"; + case 127: + return "FEE_L2_GAS_KERNEL"; + case 128: + return "NOTE_HASH_KERNEL_OUTPUT"; + case 130: + return "EMIT_NOTE_HASH_KERNEL_OUTPUT"; + case 132: + return "NULLIFIER_EXISTS_KERNEL_OUTPUT"; + case 135: + return "EMIT_NULLIFIER_KERNEL_OUTPUT"; + case 137: + return "L1_TO_L2_MSG_EXISTS_KERNEL_OUTPUT"; + case 139: + return "EMIT_UNENCRYPTED_LOG_KERNEL_OUTPUT"; + case 141: + return "EMIT_L2_TO_L1_MSGS_KERNEL_OUTPUT"; + case 143: + return "SLOAD_KERNEL_OUTPUT"; + case 145: + return "SSTORE_KERNEL_OUTPUT"; + case 149: + return "BIN_SEL_1"; + case 150: + return "BIN_SEL_2"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp index 77aaa2c852a..6fa40fcaed1 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp @@ -48,47 +48,6 @@ template struct MemRow { FF mem_w_in_tag{}; }; -inline std::string get_relation_label_mem(int index) -{ - switch (index) { - case 15: - return "MEM_CONTIGUOUS"; - case 16: - return "MEM_FIRST_EMPTY"; - case 17: - return "MEM_LAST"; - case 19: - return "TIMESTAMP"; - case 20: - return "GLOBAL_ADDR"; - case 21: - return "LAST_ACCESS_FIRST_ROW"; - case 22: - return "MEM_LAST_ACCESS_DELIMITER"; - case 23: - return "DIFF_RNG_CHK_DEC"; - case 24: - return "MEM_READ_WRITE_VAL_CONSISTENCY"; - case 25: - return "MEM_READ_WRITE_TAG_CONSISTENCY"; - case 26: - return "MEM_ZERO_INIT"; - case 27: - return "SKIP_CHECK_TAG"; - case 28: - return "MEM_IN_TAG_CONSISTENCY_1"; - case 29: - return "MEM_IN_TAG_CONSISTENCY_2"; - case 30: - return "NO_TAG_ERR_WRITE_OR_SKIP"; - case 32: - return "NO_TAG_ERR_WRITE"; - case 43: - return "MOV_SAME_TAG"; - } - return std::to_string(index); -} - template class memImpl { public: using FF = FF_; @@ -403,6 +362,50 @@ template class memImpl { } }; -template using mem = Relation>; +template class mem : public Relation> { + public: + static constexpr const char* NAME = "mem"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 15: + return "MEM_CONTIGUOUS"; + case 16: + return "MEM_FIRST_EMPTY"; + case 17: + return "MEM_LAST"; + case 19: + return "TIMESTAMP"; + case 20: + return "GLOBAL_ADDR"; + case 21: + return "LAST_ACCESS_FIRST_ROW"; + case 22: + return "MEM_LAST_ACCESS_DELIMITER"; + case 23: + return "DIFF_RNG_CHK_DEC"; + case 24: + return "MEM_READ_WRITE_VAL_CONSISTENCY"; + case 25: + return "MEM_READ_WRITE_TAG_CONSISTENCY"; + case 26: + return "MEM_ZERO_INIT"; + case 27: + return "SKIP_CHECK_TAG"; + case 28: + return "MEM_IN_TAG_CONSISTENCY_1"; + case 29: + return "MEM_IN_TAG_CONSISTENCY_2"; + case 30: + return "NO_TAG_ERR_WRITE_OR_SKIP"; + case 32: + return "NO_TAG_ERR_WRITE"; + case 43: + return "MOV_SAME_TAG"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem_slice.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem_slice.hpp index cbae6bdc8ee..4f97e128975 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem_slice.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem_slice.hpp @@ -27,33 +27,6 @@ template struct MemSliceRow { FF slice_space_id_shift{}; }; -inline std::string get_relation_label_mem_slice(int index) -{ - switch (index) { - case 1: - return "SLICE_CNT_ZERO_TEST1"; - case 2: - return "SLICE_CNT_ZERO_TEST2"; - case 3: - return "SLICE_CNT_DECREMENT"; - case 4: - return "ADDR_INCREMENT"; - case 5: - return "COL_OFFSET_INCREMENT"; - case 6: - return "SAME_CLK"; - case 7: - return "SAME_SPACE_ID"; - case 8: - return "SAME_SEL_RETURN"; - case 9: - return "SAME_SEL_CD_CPY"; - case 10: - return "SEL_MEM_INACTIVE"; - } - return std::to_string(index); -} - template class mem_sliceImpl { public: using FF = FF_; @@ -139,6 +112,36 @@ template class mem_sliceImpl { } }; -template using mem_slice = Relation>; +template class mem_slice : public Relation> { + public: + static constexpr const char* NAME = "mem_slice"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) { + case 1: + return "SLICE_CNT_ZERO_TEST1"; + case 2: + return "SLICE_CNT_ZERO_TEST2"; + case 3: + return "SLICE_CNT_DECREMENT"; + case 4: + return "ADDR_INCREMENT"; + case 5: + return "COL_OFFSET_INCREMENT"; + case 6: + return "SAME_CLK"; + case 7: + return "SAME_SPACE_ID"; + case 8: + return "SAME_SEL_RETURN"; + case 9: + return "SAME_SEL_CD_CPY"; + case 10: + return "SEL_MEM_INACTIVE"; + } + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/pedersen.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/pedersen.hpp index bc7c45c0709..6be8889e978 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/pedersen.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/pedersen.hpp @@ -10,12 +10,6 @@ template struct PedersenRow { FF pedersen_sel_pedersen{}; }; -inline std::string get_relation_label_pedersen(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class pedersenImpl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class pedersenImpl { } }; -template using pedersen = Relation>; +template class pedersen : public Relation> { + public: + static constexpr const char* NAME = "pedersen"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_alu.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_alu.hpp index c96e000c2da..8e4ae3525da 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_alu.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_alu.hpp @@ -101,7 +101,7 @@ class perm_main_alu_permutation_settings { template class perm_main_alu_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_alu"; + static constexpr const char* NAME = "PERM_MAIN_ALU"; }; template using perm_main_alu = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_bin.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_bin.hpp index 42c820a4b84..fbfbd4a9915 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_bin.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_bin.hpp @@ -61,7 +61,7 @@ class perm_main_bin_permutation_settings { template class perm_main_bin_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_bin"; + static constexpr const char* NAME = "PERM_MAIN_BIN"; }; template using perm_main_bin = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_conv.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_conv.hpp index 20b6d13e322..3f0ac59654c 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_conv.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_conv.hpp @@ -53,7 +53,7 @@ class perm_main_conv_permutation_settings { template class perm_main_conv_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_conv"; + static constexpr const char* NAME = "PERM_MAIN_CONV"; }; template using perm_main_conv = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_a.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_a.hpp index 2efb6d21b31..fb822164ac3 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_a.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_a.hpp @@ -73,7 +73,7 @@ class perm_main_mem_a_permutation_settings { template class perm_main_mem_a_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_a"; + static constexpr const char* NAME = "PERM_MAIN_MEM_A"; }; template using perm_main_mem_a = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_b.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_b.hpp index 0f7a88a66f1..da7afb490b7 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_b.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_b.hpp @@ -73,7 +73,7 @@ class perm_main_mem_b_permutation_settings { template class perm_main_mem_b_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_b"; + static constexpr const char* NAME = "PERM_MAIN_MEM_B"; }; template using perm_main_mem_b = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_c.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_c.hpp index f1888c7ce18..8b96595d294 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_c.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_c.hpp @@ -65,7 +65,7 @@ class perm_main_mem_c_permutation_settings { template class perm_main_mem_c_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_c"; + static constexpr const char* NAME = "PERM_MAIN_MEM_C"; }; template using perm_main_mem_c = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_d.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_d.hpp index 2cb433eed79..3d8c9b16ef5 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_d.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_d.hpp @@ -69,7 +69,7 @@ class perm_main_mem_d_permutation_settings { template class perm_main_mem_d_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_d"; + static constexpr const char* NAME = "PERM_MAIN_MEM_D"; }; template using perm_main_mem_d = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_a.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_a.hpp index 5d6267e60a9..de3276a762a 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_a.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_a.hpp @@ -54,7 +54,7 @@ template class perm_main_mem_ind_addr_a_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_ind_addr_a"; + static constexpr const char* NAME = "PERM_MAIN_MEM_IND_ADDR_A"; }; template using perm_main_mem_ind_addr_a = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_b.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_b.hpp index 708696d3343..18a655012eb 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_b.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_b.hpp @@ -54,7 +54,7 @@ template class perm_main_mem_ind_addr_b_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_ind_addr_b"; + static constexpr const char* NAME = "PERM_MAIN_MEM_IND_ADDR_B"; }; template using perm_main_mem_ind_addr_b = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_c.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_c.hpp index 011cee0cdba..14a43accda3 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_c.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_c.hpp @@ -54,7 +54,7 @@ template class perm_main_mem_ind_addr_c_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_ind_addr_c"; + static constexpr const char* NAME = "PERM_MAIN_MEM_IND_ADDR_C"; }; template using perm_main_mem_ind_addr_c = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp index 0db50634041..78e201106c1 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp @@ -54,7 +54,7 @@ template class perm_main_mem_ind_addr_d_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_mem_ind_addr_d"; + static constexpr const char* NAME = "PERM_MAIN_MEM_IND_ADDR_D"; }; template using perm_main_mem_ind_addr_d = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pedersen.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pedersen.hpp index 16e141e8481..7753ff50e8b 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pedersen.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pedersen.hpp @@ -45,7 +45,7 @@ class perm_main_pedersen_permutation_settings { template class perm_main_pedersen_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_pedersen"; + static constexpr const char* NAME = "PERM_MAIN_PEDERSEN"; }; template using perm_main_pedersen = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp index e79de4c0020..20b1d24dd74 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp @@ -49,7 +49,7 @@ class perm_main_pos2_perm_permutation_settings { template class perm_main_pos2_perm_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_pos2_perm"; + static constexpr const char* NAME = "PERM_MAIN_POS2_PERM"; }; template using perm_main_pos2_perm = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_slice.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_slice.hpp index 6297b546d91..e74fa08bf5f 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_slice.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_main_slice.hpp @@ -65,7 +65,7 @@ class perm_main_slice_permutation_settings { template class perm_main_slice_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_main_slice"; + static constexpr const char* NAME = "PERM_MAIN_SLICE"; }; template using perm_main_slice = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_slice_mem.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_slice_mem.hpp index e0b871a779b..7bd0a9ff343 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_slice_mem.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/perm_slice_mem.hpp @@ -57,7 +57,7 @@ class perm_slice_mem_permutation_settings { template class perm_slice_mem_relation : public GenericPermutationRelation { public: - static constexpr const char* NAME = "perm_slice_mem"; + static constexpr const char* NAME = "PERM_SLICE_MEM"; }; template using perm_slice_mem = GenericPermutation; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/poseidon2.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/poseidon2.hpp index bcccbd4236d..6b23fc5c205 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/poseidon2.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/poseidon2.hpp @@ -10,12 +10,6 @@ template struct Poseidon2Row { FF poseidon2_sel_poseidon_perm{}; }; -inline std::string get_relation_label_poseidon2(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class poseidon2Impl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class poseidon2Impl { } }; -template using poseidon2 = Relation>; +template class poseidon2 : public Relation> { + public: + static constexpr const char* NAME = "poseidon2"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/powers.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/powers.hpp index 7f49e494cdc..b6a9da83692 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/powers.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/powers.hpp @@ -10,12 +10,6 @@ template struct PowersRow { FF powers_power_of_2{}; }; -inline std::string get_relation_label_powers(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class powersImpl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class powersImpl { } }; -template using powers = Relation>; +template class powers : public Relation> { + public: + static constexpr const char* NAME = "powers"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp index 47629f26071..4a13a744389 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp @@ -56,7 +56,7 @@ class range_check_da_gas_hi_lookup_settings { template class range_check_da_gas_hi_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "range_check_da_gas_hi"; + static constexpr const char* NAME = "RANGE_CHECK_DA_GAS_HI"; }; template using range_check_da_gas_hi = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp index f006e63ecb4..400306ca4b7 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp @@ -56,7 +56,7 @@ class range_check_da_gas_lo_lookup_settings { template class range_check_da_gas_lo_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "range_check_da_gas_lo"; + static constexpr const char* NAME = "RANGE_CHECK_DA_GAS_LO"; }; template using range_check_da_gas_lo = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp index b0009a37bee..deb10a672a2 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp @@ -56,7 +56,7 @@ class range_check_l2_gas_hi_lookup_settings { template class range_check_l2_gas_hi_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "range_check_l2_gas_hi"; + static constexpr const char* NAME = "RANGE_CHECK_L2_GAS_HI"; }; template using range_check_l2_gas_hi = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp index e55a6539853..2acda771158 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp @@ -56,7 +56,7 @@ class range_check_l2_gas_lo_lookup_settings { template class range_check_l2_gas_lo_relation : public GenericLookupRelation { public: - static constexpr const char* NAME = "range_check_l2_gas_lo"; + static constexpr const char* NAME = "RANGE_CHECK_L2_GAS_LO"; }; template using range_check_l2_gas_lo = GenericLookup; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/sha256.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/sha256.hpp index c9910461560..c7e2013f19b 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/sha256.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/sha256.hpp @@ -10,12 +10,6 @@ template struct Sha256Row { FF sha256_sel_sha256_compression{}; }; -inline std::string get_relation_label_sha256(int index) -{ - switch (index) {} - return std::to_string(index); -} - template class sha256Impl { public: using FF = FF_; @@ -37,6 +31,15 @@ template class sha256Impl { } }; -template using sha256 = Relation>; +template class sha256 : public Relation> { + public: + static constexpr const char* NAME = "sha256"; + + static std::string get_subrelation_label(size_t index) + { + switch (index) {} + return std::to_string(index); + } +}; } // namespace bb::Avm_vm \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp index 14a87d089c8..de3f5151c19 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp @@ -14,6 +14,7 @@ #include "barretenberg/vm/avm_trace/stats.hpp" #include "barretenberg/vm/generated/avm_circuit_builder.hpp" #include "barretenberg/vm/generated/avm_composer.hpp" +#include "barretenberg/vm/generated/avm_flavor.hpp" #include #include @@ -21,6 +22,7 @@ #include #include #include +#include #include #include @@ -30,6 +32,53 @@ using namespace bb; std::filesystem::path avm_dump_trace_path; namespace bb::avm_trace { +namespace { + +template +std::vector> sorted_entries(const std::unordered_map& map, bool invert = false) +{ + std::vector> entries; + entries.reserve(map.size()); + for (const auto& [key, value] : map) { + entries.emplace_back(key, value); + } + std::sort(entries.begin(), entries.end(), [invert](const auto& a, const auto& b) { + bool r = a.first < b.first; + if (invert) { + r = !r; + } + return r; + }); + return entries; +} + +// Returns degree distribution information for main relations (e.g., not lookups/perms). +std::unordered_map get_relations_degrees() +{ + std::unordered_map relations_degrees; + + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { + std::unordered_map degree_distribution; + using Relation = std::tuple_element_t; + for (const auto& len : Relation::SUBRELATION_PARTIAL_LENGTHS) { + degree_distribution[static_cast(len - 1)]++; + } + std::string degrees_string; + auto entries = sorted_entries(degree_distribution, /*invert=*/true); + for (size_t n = 0; n < entries.size(); n++) { + const auto& [degree, count] = entries[n]; + if (n > 0) { + degrees_string += ", "; + } + degrees_string += std::to_string(degree) + "°: " + std::to_string(count); + } + relations_degrees.insert({ Relation::NAME, std::move(degrees_string) }); + }); + + return relations_degrees; +} + +} // namespace /** * @brief Temporary routine to generate default public inputs (gas values) until we get @@ -752,6 +801,34 @@ std::vector Execution::gen_trace(std::vector const& instructio auto trace = trace_builder.finalize(); vinfo("Final trace size: ", trace.size()); + vinfo("Number of columns: ", trace.front().SIZE); + const size_t total_elements = trace.front().SIZE * trace.size(); + const size_t nonzero_elements = [&]() { + size_t count = 0; + for (auto const& row : trace) { + for (const auto& ff : row.as_vector()) { + if (!ff.is_zero()) { + count++; + } + } + } + return count; + }(); + vinfo("Number of non-zero elements: ", + nonzero_elements, + "/", + total_elements, + " (", + 100 * nonzero_elements / total_elements, + "%)"); + vinfo("Relation degrees: ", []() { + std::string result; + for (const auto& [key, value] : sorted_entries(get_relations_degrees())) { + result += "\n\t" + key + ": [" + value + "]"; + } + return result; + }()); + return trace; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp index 292aeaea478..bb3d10f301a 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp @@ -3784,8 +3784,8 @@ std::vector AvmTraceBuilder::finalize(uint32_t min_trace_size, bool range_c range_check_size, "\n\tconv_trace_size: ", conv_trace_size, - "\n\tlookup_table_size: ", - lookup_table_size, + "\n\tbin_trace_size: ", + bin_trace_size, "\n\tsha256_trace_size: ", sha256_trace_size, "\n\tposeidon2_trace_size: ", diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_circuit_builder.hpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_circuit_builder.hpp index 02850ae6e71..9db07fe5038 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_circuit_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_circuit_builder.hpp @@ -1,12 +1,11 @@ // AUTOGENERATED FILE #pragma once +#include #include -#ifndef __wasm__ -#include -#endif #include "barretenberg/common/constexpr_utils.hpp" +#include "barretenberg/common/thread.hpp" #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" @@ -427,376 +426,72 @@ class AvmCircuitBuilder { auto polys = compute_polynomials(); const size_t num_rows = polys.get_polynomial_size(); - const auto evaluate_relation = [&](const std::string& relation_name, - std::string (*debug_label)(int)) { - typename Relation::SumcheckArrayOfValuesOverSubrelations result; - for (auto& r : result) { - r = 0; - } - constexpr size_t NUM_SUBRELATIONS = result.size(); + // Checks that we will run. + using SignalErrorFn = const std::function&; + std::vector> checks; - for (size_t i = 0; i < num_rows; ++i) { - Relation::accumulate(result, polys.get_row(i), {}, 1); + // Add relation checks. + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { + using Relation = std::tuple_element_t; + checks.push_back([&](SignalErrorFn signal_error) { + typename Relation::SumcheckArrayOfValuesOverSubrelations result; + for (auto& r : result) { + r = 0; + } + constexpr size_t NUM_SUBRELATIONS = result.size(); - bool x = true; - for (size_t j = 0; j < NUM_SUBRELATIONS; ++j) { - if (result[j] != 0) { - std::string row_name = debug_label(static_cast(j)); - throw_or_abort( - format("Relation ", relation_name, ", subrelation index ", row_name, " failed at row ", i)); - x = false; + for (size_t r = 0; r < num_rows; ++r) { + Relation::accumulate(result, polys.get_row(r), {}, 1); + for (size_t j = 0; j < NUM_SUBRELATIONS; ++j) { + if (result[j] != 0) { + signal_error(format("Relation ", + Relation::NAME, + ", subrelation ", + Relation::get_subrelation_label(j), + " failed at row ", + r)); + } } } - if (!x) { - return false; - } - } - return true; - }; + }); + }); - const auto evaluate_logderivative = [&](const std::string& lookup_name) { - // Check the logderivative relation - bb::compute_logderivative_inverse(polys, params, num_rows); + // Add calculation of logderivatives and lookup/permutation checks. + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { + using Relation = std::tuple_element_t; + checks.push_back([&, num_rows](SignalErrorFn signal_error) { + // Check the logderivative relation + bb::compute_logderivative_inverse(polys, params, num_rows); - typename LogDerivativeSettings::SumcheckArrayOfValuesOverSubrelations lookup_result; + typename Relation::SumcheckArrayOfValuesOverSubrelations lookup_result; - for (auto& r : lookup_result) { - r = 0; - } - for (size_t i = 0; i < num_rows; ++i) { - LogDerivativeSettings::accumulate(lookup_result, polys.get_row(i), params, 1); - } - for (auto r : lookup_result) { - if (r != 0) { - throw_or_abort(format("Lookup ", lookup_name, " failed.")); - return false; + for (auto& r : lookup_result) { + r = 0; } - } - return true; - }; - - // Check relations - auto alu = [=]() { - return evaluate_relation.template operator()>("alu", Avm_vm::get_relation_label_alu); - }; - auto binary = [=]() { - return evaluate_relation.template operator()>("binary", - Avm_vm::get_relation_label_binary); - }; - auto conversion = [=]() { - return evaluate_relation.template operator()>("conversion", - Avm_vm::get_relation_label_conversion); - }; - auto gas = [=]() { - return evaluate_relation.template operator()>("gas", Avm_vm::get_relation_label_gas); - }; - auto keccakf1600 = [=]() { - return evaluate_relation.template operator()>( - "keccakf1600", Avm_vm::get_relation_label_keccakf1600); - }; - auto kernel = [=]() { - return evaluate_relation.template operator()>("kernel", - Avm_vm::get_relation_label_kernel); - }; - auto main = [=]() { - return evaluate_relation.template operator()>("main", Avm_vm::get_relation_label_main); - }; - auto mem = [=]() { - return evaluate_relation.template operator()>("mem", Avm_vm::get_relation_label_mem); - }; - auto mem_slice = [=]() { - return evaluate_relation.template operator()>("mem_slice", - Avm_vm::get_relation_label_mem_slice); - }; - auto pedersen = [=]() { - return evaluate_relation.template operator()>("pedersen", - Avm_vm::get_relation_label_pedersen); - }; - auto poseidon2 = [=]() { - return evaluate_relation.template operator()>("poseidon2", - Avm_vm::get_relation_label_poseidon2); - }; - auto powers = [=]() { - return evaluate_relation.template operator()>("powers", - Avm_vm::get_relation_label_powers); - }; - auto sha256 = [=]() { - return evaluate_relation.template operator()>("sha256", - Avm_vm::get_relation_label_sha256); - }; - - // Check lookups - auto perm_slice_mem = [=]() { - return evaluate_logderivative.template operator()>("PERM_SLICE_MEM"); - }; - auto perm_main_alu = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_ALU"); - }; - auto perm_main_bin = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_BIN"); - }; - auto perm_main_conv = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_CONV"); - }; - auto perm_main_pos2_perm = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_POS2_PERM"); - }; - auto perm_main_pedersen = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_PEDERSEN"); - }; - auto perm_main_slice = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_SLICE"); - }; - auto perm_main_mem_a = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_MEM_A"); - }; - auto perm_main_mem_b = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_MEM_B"); - }; - auto perm_main_mem_c = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_MEM_C"); - }; - auto perm_main_mem_d = [=]() { - return evaluate_logderivative.template operator()>("PERM_MAIN_MEM_D"); - }; - auto perm_main_mem_ind_addr_a = [=]() { - return evaluate_logderivative.template operator()>( - "PERM_MAIN_MEM_IND_ADDR_A"); - }; - auto perm_main_mem_ind_addr_b = [=]() { - return evaluate_logderivative.template operator()>( - "PERM_MAIN_MEM_IND_ADDR_B"); - }; - auto perm_main_mem_ind_addr_c = [=]() { - return evaluate_logderivative.template operator()>( - "PERM_MAIN_MEM_IND_ADDR_C"); - }; - auto perm_main_mem_ind_addr_d = [=]() { - return evaluate_logderivative.template operator()>( - "PERM_MAIN_MEM_IND_ADDR_D"); - }; - auto lookup_byte_lengths = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_BYTE_LENGTHS"); - }; - auto lookup_byte_operations = [=]() { - return evaluate_logderivative.template operator()>( - "LOOKUP_BYTE_OPERATIONS"); - }; - auto lookup_cd_value = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_CD_VALUE"); - }; - auto lookup_ret_value = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_RET_VALUE"); - }; - auto lookup_opcode_gas = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_OPCODE_GAS"); - }; - auto range_check_l2_gas_hi = [=]() { - return evaluate_logderivative.template operator()>( - "RANGE_CHECK_L2_GAS_HI"); - }; - auto range_check_l2_gas_lo = [=]() { - return evaluate_logderivative.template operator()>( - "RANGE_CHECK_L2_GAS_LO"); - }; - auto range_check_da_gas_hi = [=]() { - return evaluate_logderivative.template operator()>( - "RANGE_CHECK_DA_GAS_HI"); - }; - auto range_check_da_gas_lo = [=]() { - return evaluate_logderivative.template operator()>( - "RANGE_CHECK_DA_GAS_LO"); - }; - auto kernel_output_lookup = [=]() { - return evaluate_logderivative.template operator()>( - "KERNEL_OUTPUT_LOOKUP"); - }; - auto lookup_into_kernel = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_INTO_KERNEL"); - }; - auto incl_main_tag_err = [=]() { - return evaluate_logderivative.template operator()>("INCL_MAIN_TAG_ERR"); - }; - auto incl_mem_tag_err = [=]() { - return evaluate_logderivative.template operator()>("INCL_MEM_TAG_ERR"); - }; - auto lookup_mem_rng_chk_lo = [=]() { - return evaluate_logderivative.template operator()>( - "LOOKUP_MEM_RNG_CHK_LO"); - }; - auto lookup_mem_rng_chk_mid = [=]() { - return evaluate_logderivative.template operator()>( - "LOOKUP_MEM_RNG_CHK_MID"); - }; - auto lookup_mem_rng_chk_hi = [=]() { - return evaluate_logderivative.template operator()>( - "LOOKUP_MEM_RNG_CHK_HI"); - }; - auto lookup_pow_2_0 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_POW_2_0"); - }; - auto lookup_pow_2_1 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_POW_2_1"); - }; - auto lookup_u8_0 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U8_0"); - }; - auto lookup_u8_1 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U8_1"); - }; - auto lookup_u16_0 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_0"); - }; - auto lookup_u16_1 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_1"); - }; - auto lookup_u16_2 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_2"); - }; - auto lookup_u16_3 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_3"); - }; - auto lookup_u16_4 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_4"); - }; - auto lookup_u16_5 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_5"); - }; - auto lookup_u16_6 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_6"); - }; - auto lookup_u16_7 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_7"); - }; - auto lookup_u16_8 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_8"); - }; - auto lookup_u16_9 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_9"); - }; - auto lookup_u16_10 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_10"); - }; - auto lookup_u16_11 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_11"); - }; - auto lookup_u16_12 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_12"); - }; - auto lookup_u16_13 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_13"); - }; - auto lookup_u16_14 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_U16_14"); - }; - auto lookup_div_u16_0 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_0"); - }; - auto lookup_div_u16_1 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_1"); - }; - auto lookup_div_u16_2 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_2"); - }; - auto lookup_div_u16_3 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_3"); - }; - auto lookup_div_u16_4 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_4"); - }; - auto lookup_div_u16_5 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_5"); - }; - auto lookup_div_u16_6 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_6"); - }; - auto lookup_div_u16_7 = [=]() { - return evaluate_logderivative.template operator()>("LOOKUP_DIV_U16_7"); - }; - - // Evaluate check circuit closures as futures - std::vector> relation_futures; - - relation_futures.emplace_back(std::async(std::launch::async, alu)); - relation_futures.emplace_back(std::async(std::launch::async, binary)); - relation_futures.emplace_back(std::async(std::launch::async, conversion)); - relation_futures.emplace_back(std::async(std::launch::async, gas)); - relation_futures.emplace_back(std::async(std::launch::async, keccakf1600)); - relation_futures.emplace_back(std::async(std::launch::async, kernel)); - relation_futures.emplace_back(std::async(std::launch::async, main)); - relation_futures.emplace_back(std::async(std::launch::async, mem)); - relation_futures.emplace_back(std::async(std::launch::async, mem_slice)); - relation_futures.emplace_back(std::async(std::launch::async, pedersen)); - relation_futures.emplace_back(std::async(std::launch::async, poseidon2)); - relation_futures.emplace_back(std::async(std::launch::async, powers)); - relation_futures.emplace_back(std::async(std::launch::async, sha256)); - relation_futures.emplace_back(std::async(std::launch::async, perm_slice_mem)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_alu)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_bin)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_conv)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_pos2_perm)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_pedersen)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_slice)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_a)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_b)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_c)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_d)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_ind_addr_a)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_ind_addr_b)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_ind_addr_c)); - relation_futures.emplace_back(std::async(std::launch::async, perm_main_mem_ind_addr_d)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_byte_lengths)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_byte_operations)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_cd_value)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_ret_value)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_opcode_gas)); - relation_futures.emplace_back(std::async(std::launch::async, range_check_l2_gas_hi)); - relation_futures.emplace_back(std::async(std::launch::async, range_check_l2_gas_lo)); - relation_futures.emplace_back(std::async(std::launch::async, range_check_da_gas_hi)); - relation_futures.emplace_back(std::async(std::launch::async, range_check_da_gas_lo)); - relation_futures.emplace_back(std::async(std::launch::async, kernel_output_lookup)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_into_kernel)); - relation_futures.emplace_back(std::async(std::launch::async, incl_main_tag_err)); - relation_futures.emplace_back(std::async(std::launch::async, incl_mem_tag_err)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_mem_rng_chk_lo)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_mem_rng_chk_mid)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_mem_rng_chk_hi)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_pow_2_0)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_pow_2_1)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u8_0)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u8_1)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_0)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_1)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_2)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_3)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_4)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_5)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_6)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_7)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_8)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_9)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_10)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_11)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_12)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_13)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_u16_14)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_0)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_1)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_2)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_3)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_4)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_5)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_6)); - relation_futures.emplace_back(std::async(std::launch::async, lookup_div_u16_7)); + for (size_t r = 0; r < num_rows; ++r) { + Relation::accumulate(lookup_result, polys.get_row(r), params, 1); + } + for (auto r : lookup_result) { + if (r != 0) { + signal_error(format("Lookup ", Relation::NAME, " failed.")); + } + } + }); + }); - // Wait for lookup evaluations to complete - for (auto& future : relation_futures) { - if (!future.get()) { - return false; - } + std::string errors; + auto signal_error = [&](const std::string& error) { + // Thread safety first! + static std::mutex m; + std::lock_guard lock(m); + errors += error + "\n"; + }; + bb::parallel_for(checks.size(), [&](size_t i) { checks[i](signal_error); }); + if (!errors.empty()) { + throw_or_abort(errors); } - return true; + return errors.empty(); } [[nodiscard]] size_t get_num_gates() const { return rows.size(); } diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.cpp index fcb1803a2cb..5e62d6d07d6 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.cpp @@ -431,424 +431,434 @@ template std::vector AvmFullRow::names() "lookup_div_u16_7_counts" }; } +template RefVector AvmFullRow::as_vector() const +{ + return RefVector{ + main_clk, + main_sel_first, + kernel_kernel_inputs, + kernel_kernel_value_out, + kernel_kernel_side_effect_out, + kernel_kernel_metadata_out, + main_calldata, + main_returndata, + alu_a_hi, + alu_a_lo, + alu_b_hi, + alu_b_lo, + alu_borrow, + alu_cf, + alu_clk, + alu_cmp_rng_ctr, + alu_div_u16_r0, + alu_div_u16_r1, + alu_div_u16_r2, + alu_div_u16_r3, + alu_div_u16_r4, + alu_div_u16_r5, + alu_div_u16_r6, + alu_div_u16_r7, + alu_divisor_hi, + alu_divisor_lo, + alu_ff_tag, + alu_ia, + alu_ib, + alu_ic, + alu_in_tag, + alu_op_add, + alu_op_cast, + alu_op_cast_prev, + alu_op_div, + alu_op_div_a_lt_b, + alu_op_div_std, + alu_op_eq, + alu_op_eq_diff_inv, + alu_op_lt, + alu_op_lte, + alu_op_mul, + alu_op_not, + alu_op_shl, + alu_op_shr, + alu_op_sub, + alu_p_a_borrow, + alu_p_b_borrow, + alu_p_sub_a_hi, + alu_p_sub_a_lo, + alu_p_sub_b_hi, + alu_p_sub_b_lo, + alu_partial_prod_hi, + alu_partial_prod_lo, + alu_quotient_hi, + alu_quotient_lo, + alu_remainder, + alu_res_hi, + alu_res_lo, + alu_sel_alu, + alu_sel_cmp, + alu_sel_div_rng_chk, + alu_sel_rng_chk, + alu_sel_rng_chk_lookup, + alu_sel_shift_which, + alu_shift_lt_bit_len, + alu_t_sub_s_bits, + alu_two_pow_s, + alu_two_pow_t_sub_s, + alu_u128_tag, + alu_u16_r0, + alu_u16_r1, + alu_u16_r10, + alu_u16_r11, + alu_u16_r12, + alu_u16_r13, + alu_u16_r14, + alu_u16_r2, + alu_u16_r3, + alu_u16_r4, + alu_u16_r5, + alu_u16_r6, + alu_u16_r7, + alu_u16_r8, + alu_u16_r9, + alu_u16_tag, + alu_u32_tag, + alu_u64_tag, + alu_u8_r0, + alu_u8_r1, + alu_u8_tag, + binary_acc_ia, + binary_acc_ib, + binary_acc_ic, + binary_clk, + binary_ia_bytes, + binary_ib_bytes, + binary_ic_bytes, + binary_in_tag, + binary_mem_tag_ctr, + binary_mem_tag_ctr_inv, + binary_op_id, + binary_sel_bin, + binary_start, + byte_lookup_sel_bin, + byte_lookup_table_byte_lengths, + byte_lookup_table_in_tags, + byte_lookup_table_input_a, + byte_lookup_table_input_b, + byte_lookup_table_op_id, + byte_lookup_table_output, + conversion_clk, + conversion_input, + conversion_num_limbs, + conversion_radix, + conversion_sel_to_radix_le, + gas_da_gas_fixed_table, + gas_l2_gas_fixed_table, + gas_sel_gas_cost, + keccakf1600_clk, + keccakf1600_input, + keccakf1600_output, + keccakf1600_sel_keccakf1600, + kernel_emit_l2_to_l1_msg_write_offset, + kernel_emit_note_hash_write_offset, + kernel_emit_nullifier_write_offset, + kernel_emit_unencrypted_log_write_offset, + kernel_kernel_in_offset, + kernel_kernel_out_offset, + kernel_l1_to_l2_msg_exists_write_offset, + kernel_note_hash_exist_write_offset, + kernel_nullifier_exists_write_offset, + kernel_nullifier_non_exists_write_offset, + kernel_q_public_input_kernel_add_to_table, + kernel_q_public_input_kernel_out_add_to_table, + kernel_side_effect_counter, + kernel_sload_write_offset, + kernel_sstore_write_offset, + main_abs_da_rem_gas_hi, + main_abs_da_rem_gas_lo, + main_abs_l2_rem_gas_hi, + main_abs_l2_rem_gas_lo, + main_alu_in_tag, + main_bin_op_id, + main_call_ptr, + main_da_gas_op_cost, + main_da_gas_remaining, + main_da_out_of_gas, + main_ia, + main_ib, + main_ic, + main_id, + main_id_zero, + main_ind_addr_a, + main_ind_addr_b, + main_ind_addr_c, + main_ind_addr_d, + main_internal_return_ptr, + main_inv, + main_l2_gas_op_cost, + main_l2_gas_remaining, + main_l2_out_of_gas, + main_mem_addr_a, + main_mem_addr_b, + main_mem_addr_c, + main_mem_addr_d, + main_op_err, + main_opcode_val, + main_pc, + main_r_in_tag, + main_rwa, + main_rwb, + main_rwc, + main_rwd, + main_sel_alu, + main_sel_bin, + main_sel_calldata, + main_sel_gas_accounting_active, + main_sel_last, + main_sel_mem_op_a, + main_sel_mem_op_activate_gas, + main_sel_mem_op_b, + main_sel_mem_op_c, + main_sel_mem_op_d, + main_sel_mov_ia_to_ic, + main_sel_mov_ib_to_ic, + main_sel_op_add, + main_sel_op_address, + main_sel_op_and, + main_sel_op_block_number, + main_sel_op_calldata_copy, + main_sel_op_cast, + main_sel_op_chain_id, + main_sel_op_cmov, + main_sel_op_coinbase, + main_sel_op_dagasleft, + main_sel_op_div, + main_sel_op_emit_l2_to_l1_msg, + main_sel_op_emit_note_hash, + main_sel_op_emit_nullifier, + main_sel_op_emit_unencrypted_log, + main_sel_op_eq, + main_sel_op_external_call, + main_sel_op_external_return, + main_sel_op_fdiv, + main_sel_op_fee_per_da_gas, + main_sel_op_fee_per_l2_gas, + main_sel_op_function_selector, + main_sel_op_get_contract_instance, + main_sel_op_halt, + main_sel_op_internal_call, + main_sel_op_internal_return, + main_sel_op_jump, + main_sel_op_jumpi, + main_sel_op_keccak, + main_sel_op_l1_to_l2_msg_exists, + main_sel_op_l2gasleft, + main_sel_op_lt, + main_sel_op_lte, + main_sel_op_mov, + main_sel_op_mul, + main_sel_op_not, + main_sel_op_note_hash_exists, + main_sel_op_nullifier_exists, + main_sel_op_or, + main_sel_op_pedersen, + main_sel_op_poseidon2, + main_sel_op_radix_le, + main_sel_op_sender, + main_sel_op_sha256, + main_sel_op_shl, + main_sel_op_shr, + main_sel_op_sload, + main_sel_op_sstore, + main_sel_op_storage_address, + main_sel_op_sub, + main_sel_op_timestamp, + main_sel_op_transaction_fee, + main_sel_op_version, + main_sel_op_xor, + main_sel_q_kernel_lookup, + main_sel_q_kernel_output_lookup, + main_sel_resolve_ind_addr_a, + main_sel_resolve_ind_addr_b, + main_sel_resolve_ind_addr_c, + main_sel_resolve_ind_addr_d, + main_sel_returndata, + main_sel_rng_16, + main_sel_rng_8, + main_sel_slice_gadget, + main_space_id, + main_tag_err, + main_w_in_tag, + mem_addr, + mem_clk, + mem_diff_hi, + mem_diff_lo, + mem_diff_mid, + mem_glob_addr, + mem_last, + mem_lastAccess, + mem_one_min_inv, + mem_r_in_tag, + mem_rw, + mem_sel_mem, + mem_sel_mov_ia_to_ic, + mem_sel_mov_ib_to_ic, + mem_sel_op_a, + mem_sel_op_b, + mem_sel_op_c, + mem_sel_op_cmov, + mem_sel_op_d, + mem_sel_op_slice, + mem_sel_resolve_ind_addr_a, + mem_sel_resolve_ind_addr_b, + mem_sel_resolve_ind_addr_c, + mem_sel_resolve_ind_addr_d, + mem_sel_rng_chk, + mem_skip_check_tag, + mem_space_id, + mem_tag, + mem_tag_err, + mem_tsp, + mem_val, + mem_w_in_tag, + pedersen_clk, + pedersen_input, + pedersen_output, + pedersen_sel_pedersen, + poseidon2_clk, + poseidon2_input, + poseidon2_output, + poseidon2_sel_poseidon_perm, + powers_power_of_2, + sha256_clk, + sha256_input, + sha256_output, + sha256_sel_sha256_compression, + sha256_state, + slice_addr, + slice_clk, + slice_cnt, + slice_col_offset, + slice_one_min_inv, + slice_sel_cd_cpy, + slice_sel_mem_active, + slice_sel_return, + slice_sel_start, + slice_space_id, + slice_val, + perm_slice_mem, + perm_main_alu, + perm_main_bin, + perm_main_conv, + perm_main_pos2_perm, + perm_main_pedersen, + perm_main_slice, + perm_main_mem_a, + perm_main_mem_b, + perm_main_mem_c, + perm_main_mem_d, + perm_main_mem_ind_addr_a, + perm_main_mem_ind_addr_b, + perm_main_mem_ind_addr_c, + perm_main_mem_ind_addr_d, + lookup_byte_lengths, + lookup_byte_operations, + lookup_cd_value, + lookup_ret_value, + lookup_opcode_gas, + range_check_l2_gas_hi, + range_check_l2_gas_lo, + range_check_da_gas_hi, + range_check_da_gas_lo, + kernel_output_lookup, + lookup_into_kernel, + incl_main_tag_err, + incl_mem_tag_err, + lookup_mem_rng_chk_lo, + lookup_mem_rng_chk_mid, + lookup_mem_rng_chk_hi, + lookup_pow_2_0, + lookup_pow_2_1, + lookup_u8_0, + lookup_u8_1, + lookup_u16_0, + lookup_u16_1, + lookup_u16_2, + lookup_u16_3, + lookup_u16_4, + lookup_u16_5, + lookup_u16_6, + lookup_u16_7, + lookup_u16_8, + lookup_u16_9, + lookup_u16_10, + lookup_u16_11, + lookup_u16_12, + lookup_u16_13, + lookup_u16_14, + lookup_div_u16_0, + lookup_div_u16_1, + lookup_div_u16_2, + lookup_div_u16_3, + lookup_div_u16_4, + lookup_div_u16_5, + lookup_div_u16_6, + lookup_div_u16_7, + lookup_byte_lengths_counts, + lookup_byte_operations_counts, + lookup_cd_value_counts, + lookup_ret_value_counts, + lookup_opcode_gas_counts, + range_check_l2_gas_hi_counts, + range_check_l2_gas_lo_counts, + range_check_da_gas_hi_counts, + range_check_da_gas_lo_counts, + kernel_output_lookup_counts, + lookup_into_kernel_counts, + incl_main_tag_err_counts, + incl_mem_tag_err_counts, + lookup_mem_rng_chk_lo_counts, + lookup_mem_rng_chk_mid_counts, + lookup_mem_rng_chk_hi_counts, + lookup_pow_2_0_counts, + lookup_pow_2_1_counts, + lookup_u8_0_counts, + lookup_u8_1_counts, + lookup_u16_0_counts, + lookup_u16_1_counts, + lookup_u16_2_counts, + lookup_u16_3_counts, + lookup_u16_4_counts, + lookup_u16_5_counts, + lookup_u16_6_counts, + lookup_u16_7_counts, + lookup_u16_8_counts, + lookup_u16_9_counts, + lookup_u16_10_counts, + lookup_u16_11_counts, + lookup_u16_12_counts, + lookup_u16_13_counts, + lookup_u16_14_counts, + lookup_div_u16_0_counts, + lookup_div_u16_1_counts, + lookup_div_u16_2_counts, + lookup_div_u16_3_counts, + lookup_div_u16_4_counts, + lookup_div_u16_5_counts, + lookup_div_u16_6_counts, + lookup_div_u16_7_counts, + }; +} + template std::ostream& operator<<(std::ostream& os, AvmFullRow const& row) { - return os << field_to_string(row.main_clk) // - << "," << field_to_string(row.main_sel_first) // - << "," << field_to_string(row.kernel_kernel_inputs) // - << "," << field_to_string(row.kernel_kernel_value_out) // - << "," << field_to_string(row.kernel_kernel_side_effect_out) // - << "," << field_to_string(row.kernel_kernel_metadata_out) // - << "," << field_to_string(row.main_calldata) // - << "," << field_to_string(row.main_returndata) // - << "," << field_to_string(row.alu_a_hi) // - << "," << field_to_string(row.alu_a_lo) // - << "," << field_to_string(row.alu_b_hi) // - << "," << field_to_string(row.alu_b_lo) // - << "," << field_to_string(row.alu_borrow) // - << "," << field_to_string(row.alu_cf) // - << "," << field_to_string(row.alu_clk) // - << "," << field_to_string(row.alu_cmp_rng_ctr) // - << "," << field_to_string(row.alu_div_u16_r0) // - << "," << field_to_string(row.alu_div_u16_r1) // - << "," << field_to_string(row.alu_div_u16_r2) // - << "," << field_to_string(row.alu_div_u16_r3) // - << "," << field_to_string(row.alu_div_u16_r4) // - << "," << field_to_string(row.alu_div_u16_r5) // - << "," << field_to_string(row.alu_div_u16_r6) // - << "," << field_to_string(row.alu_div_u16_r7) // - << "," << field_to_string(row.alu_divisor_hi) // - << "," << field_to_string(row.alu_divisor_lo) // - << "," << field_to_string(row.alu_ff_tag) // - << "," << field_to_string(row.alu_ia) // - << "," << field_to_string(row.alu_ib) // - << "," << field_to_string(row.alu_ic) // - << "," << field_to_string(row.alu_in_tag) // - << "," << field_to_string(row.alu_op_add) // - << "," << field_to_string(row.alu_op_cast) // - << "," << field_to_string(row.alu_op_cast_prev) // - << "," << field_to_string(row.alu_op_div) // - << "," << field_to_string(row.alu_op_div_a_lt_b) // - << "," << field_to_string(row.alu_op_div_std) // - << "," << field_to_string(row.alu_op_eq) // - << "," << field_to_string(row.alu_op_eq_diff_inv) // - << "," << field_to_string(row.alu_op_lt) // - << "," << field_to_string(row.alu_op_lte) // - << "," << field_to_string(row.alu_op_mul) // - << "," << field_to_string(row.alu_op_not) // - << "," << field_to_string(row.alu_op_shl) // - << "," << field_to_string(row.alu_op_shr) // - << "," << field_to_string(row.alu_op_sub) // - << "," << field_to_string(row.alu_p_a_borrow) // - << "," << field_to_string(row.alu_p_b_borrow) // - << "," << field_to_string(row.alu_p_sub_a_hi) // - << "," << field_to_string(row.alu_p_sub_a_lo) // - << "," << field_to_string(row.alu_p_sub_b_hi) // - << "," << field_to_string(row.alu_p_sub_b_lo) // - << "," << field_to_string(row.alu_partial_prod_hi) // - << "," << field_to_string(row.alu_partial_prod_lo) // - << "," << field_to_string(row.alu_quotient_hi) // - << "," << field_to_string(row.alu_quotient_lo) // - << "," << field_to_string(row.alu_remainder) // - << "," << field_to_string(row.alu_res_hi) // - << "," << field_to_string(row.alu_res_lo) // - << "," << field_to_string(row.alu_sel_alu) // - << "," << field_to_string(row.alu_sel_cmp) // - << "," << field_to_string(row.alu_sel_div_rng_chk) // - << "," << field_to_string(row.alu_sel_rng_chk) // - << "," << field_to_string(row.alu_sel_rng_chk_lookup) // - << "," << field_to_string(row.alu_sel_shift_which) // - << "," << field_to_string(row.alu_shift_lt_bit_len) // - << "," << field_to_string(row.alu_t_sub_s_bits) // - << "," << field_to_string(row.alu_two_pow_s) // - << "," << field_to_string(row.alu_two_pow_t_sub_s) // - << "," << field_to_string(row.alu_u128_tag) // - << "," << field_to_string(row.alu_u16_r0) // - << "," << field_to_string(row.alu_u16_r1) // - << "," << field_to_string(row.alu_u16_r10) // - << "," << field_to_string(row.alu_u16_r11) // - << "," << field_to_string(row.alu_u16_r12) // - << "," << field_to_string(row.alu_u16_r13) // - << "," << field_to_string(row.alu_u16_r14) // - << "," << field_to_string(row.alu_u16_r2) // - << "," << field_to_string(row.alu_u16_r3) // - << "," << field_to_string(row.alu_u16_r4) // - << "," << field_to_string(row.alu_u16_r5) // - << "," << field_to_string(row.alu_u16_r6) // - << "," << field_to_string(row.alu_u16_r7) // - << "," << field_to_string(row.alu_u16_r8) // - << "," << field_to_string(row.alu_u16_r9) // - << "," << field_to_string(row.alu_u16_tag) // - << "," << field_to_string(row.alu_u32_tag) // - << "," << field_to_string(row.alu_u64_tag) // - << "," << field_to_string(row.alu_u8_r0) // - << "," << field_to_string(row.alu_u8_r1) // - << "," << field_to_string(row.alu_u8_tag) // - << "," << field_to_string(row.binary_acc_ia) // - << "," << field_to_string(row.binary_acc_ib) // - << "," << field_to_string(row.binary_acc_ic) // - << "," << field_to_string(row.binary_clk) // - << "," << field_to_string(row.binary_ia_bytes) // - << "," << field_to_string(row.binary_ib_bytes) // - << "," << field_to_string(row.binary_ic_bytes) // - << "," << field_to_string(row.binary_in_tag) // - << "," << field_to_string(row.binary_mem_tag_ctr) // - << "," << field_to_string(row.binary_mem_tag_ctr_inv) // - << "," << field_to_string(row.binary_op_id) // - << "," << field_to_string(row.binary_sel_bin) // - << "," << field_to_string(row.binary_start) // - << "," << field_to_string(row.byte_lookup_sel_bin) // - << "," << field_to_string(row.byte_lookup_table_byte_lengths) // - << "," << field_to_string(row.byte_lookup_table_in_tags) // - << "," << field_to_string(row.byte_lookup_table_input_a) // - << "," << field_to_string(row.byte_lookup_table_input_b) // - << "," << field_to_string(row.byte_lookup_table_op_id) // - << "," << field_to_string(row.byte_lookup_table_output) // - << "," << field_to_string(row.conversion_clk) // - << "," << field_to_string(row.conversion_input) // - << "," << field_to_string(row.conversion_num_limbs) // - << "," << field_to_string(row.conversion_radix) // - << "," << field_to_string(row.conversion_sel_to_radix_le) // - << "," << field_to_string(row.gas_da_gas_fixed_table) // - << "," << field_to_string(row.gas_l2_gas_fixed_table) // - << "," << field_to_string(row.gas_sel_gas_cost) // - << "," << field_to_string(row.keccakf1600_clk) // - << "," << field_to_string(row.keccakf1600_input) // - << "," << field_to_string(row.keccakf1600_output) // - << "," << field_to_string(row.keccakf1600_sel_keccakf1600) // - << "," << field_to_string(row.kernel_emit_l2_to_l1_msg_write_offset) // - << "," << field_to_string(row.kernel_emit_note_hash_write_offset) // - << "," << field_to_string(row.kernel_emit_nullifier_write_offset) // - << "," << field_to_string(row.kernel_emit_unencrypted_log_write_offset) // - << "," << field_to_string(row.kernel_kernel_in_offset) // - << "," << field_to_string(row.kernel_kernel_out_offset) // - << "," << field_to_string(row.kernel_l1_to_l2_msg_exists_write_offset) // - << "," << field_to_string(row.kernel_note_hash_exist_write_offset) // - << "," << field_to_string(row.kernel_nullifier_exists_write_offset) // - << "," << field_to_string(row.kernel_nullifier_non_exists_write_offset) // - << "," << field_to_string(row.kernel_q_public_input_kernel_add_to_table) // - << "," << field_to_string(row.kernel_q_public_input_kernel_out_add_to_table) // - << "," << field_to_string(row.kernel_side_effect_counter) // - << "," << field_to_string(row.kernel_sload_write_offset) // - << "," << field_to_string(row.kernel_sstore_write_offset) // - << "," << field_to_string(row.main_abs_da_rem_gas_hi) // - << "," << field_to_string(row.main_abs_da_rem_gas_lo) // - << "," << field_to_string(row.main_abs_l2_rem_gas_hi) // - << "," << field_to_string(row.main_abs_l2_rem_gas_lo) // - << "," << field_to_string(row.main_alu_in_tag) // - << "," << field_to_string(row.main_bin_op_id) // - << "," << field_to_string(row.main_call_ptr) // - << "," << field_to_string(row.main_da_gas_op_cost) // - << "," << field_to_string(row.main_da_gas_remaining) // - << "," << field_to_string(row.main_da_out_of_gas) // - << "," << field_to_string(row.main_ia) // - << "," << field_to_string(row.main_ib) // - << "," << field_to_string(row.main_ic) // - << "," << field_to_string(row.main_id) // - << "," << field_to_string(row.main_id_zero) // - << "," << field_to_string(row.main_ind_addr_a) // - << "," << field_to_string(row.main_ind_addr_b) // - << "," << field_to_string(row.main_ind_addr_c) // - << "," << field_to_string(row.main_ind_addr_d) // - << "," << field_to_string(row.main_internal_return_ptr) // - << "," << field_to_string(row.main_inv) // - << "," << field_to_string(row.main_l2_gas_op_cost) // - << "," << field_to_string(row.main_l2_gas_remaining) // - << "," << field_to_string(row.main_l2_out_of_gas) // - << "," << field_to_string(row.main_mem_addr_a) // - << "," << field_to_string(row.main_mem_addr_b) // - << "," << field_to_string(row.main_mem_addr_c) // - << "," << field_to_string(row.main_mem_addr_d) // - << "," << field_to_string(row.main_op_err) // - << "," << field_to_string(row.main_opcode_val) // - << "," << field_to_string(row.main_pc) // - << "," << field_to_string(row.main_r_in_tag) // - << "," << field_to_string(row.main_rwa) // - << "," << field_to_string(row.main_rwb) // - << "," << field_to_string(row.main_rwc) // - << "," << field_to_string(row.main_rwd) // - << "," << field_to_string(row.main_sel_alu) // - << "," << field_to_string(row.main_sel_bin) // - << "," << field_to_string(row.main_sel_calldata) // - << "," << field_to_string(row.main_sel_gas_accounting_active) // - << "," << field_to_string(row.main_sel_last) // - << "," << field_to_string(row.main_sel_mem_op_a) // - << "," << field_to_string(row.main_sel_mem_op_activate_gas) // - << "," << field_to_string(row.main_sel_mem_op_b) // - << "," << field_to_string(row.main_sel_mem_op_c) // - << "," << field_to_string(row.main_sel_mem_op_d) // - << "," << field_to_string(row.main_sel_mov_ia_to_ic) // - << "," << field_to_string(row.main_sel_mov_ib_to_ic) // - << "," << field_to_string(row.main_sel_op_add) // - << "," << field_to_string(row.main_sel_op_address) // - << "," << field_to_string(row.main_sel_op_and) // - << "," << field_to_string(row.main_sel_op_block_number) // - << "," << field_to_string(row.main_sel_op_calldata_copy) // - << "," << field_to_string(row.main_sel_op_cast) // - << "," << field_to_string(row.main_sel_op_chain_id) // - << "," << field_to_string(row.main_sel_op_cmov) // - << "," << field_to_string(row.main_sel_op_coinbase) // - << "," << field_to_string(row.main_sel_op_dagasleft) // - << "," << field_to_string(row.main_sel_op_div) // - << "," << field_to_string(row.main_sel_op_emit_l2_to_l1_msg) // - << "," << field_to_string(row.main_sel_op_emit_note_hash) // - << "," << field_to_string(row.main_sel_op_emit_nullifier) // - << "," << field_to_string(row.main_sel_op_emit_unencrypted_log) // - << "," << field_to_string(row.main_sel_op_eq) // - << "," << field_to_string(row.main_sel_op_external_call) // - << "," << field_to_string(row.main_sel_op_external_return) // - << "," << field_to_string(row.main_sel_op_fdiv) // - << "," << field_to_string(row.main_sel_op_fee_per_da_gas) // - << "," << field_to_string(row.main_sel_op_fee_per_l2_gas) // - << "," << field_to_string(row.main_sel_op_function_selector) // - << "," << field_to_string(row.main_sel_op_get_contract_instance) // - << "," << field_to_string(row.main_sel_op_halt) // - << "," << field_to_string(row.main_sel_op_internal_call) // - << "," << field_to_string(row.main_sel_op_internal_return) // - << "," << field_to_string(row.main_sel_op_jump) // - << "," << field_to_string(row.main_sel_op_jumpi) // - << "," << field_to_string(row.main_sel_op_keccak) // - << "," << field_to_string(row.main_sel_op_l1_to_l2_msg_exists) // - << "," << field_to_string(row.main_sel_op_l2gasleft) // - << "," << field_to_string(row.main_sel_op_lt) // - << "," << field_to_string(row.main_sel_op_lte) // - << "," << field_to_string(row.main_sel_op_mov) // - << "," << field_to_string(row.main_sel_op_mul) // - << "," << field_to_string(row.main_sel_op_not) // - << "," << field_to_string(row.main_sel_op_note_hash_exists) // - << "," << field_to_string(row.main_sel_op_nullifier_exists) // - << "," << field_to_string(row.main_sel_op_or) // - << "," << field_to_string(row.main_sel_op_pedersen) // - << "," << field_to_string(row.main_sel_op_poseidon2) // - << "," << field_to_string(row.main_sel_op_radix_le) // - << "," << field_to_string(row.main_sel_op_sender) // - << "," << field_to_string(row.main_sel_op_sha256) // - << "," << field_to_string(row.main_sel_op_shl) // - << "," << field_to_string(row.main_sel_op_shr) // - << "," << field_to_string(row.main_sel_op_sload) // - << "," << field_to_string(row.main_sel_op_sstore) // - << "," << field_to_string(row.main_sel_op_storage_address) // - << "," << field_to_string(row.main_sel_op_sub) // - << "," << field_to_string(row.main_sel_op_timestamp) // - << "," << field_to_string(row.main_sel_op_transaction_fee) // - << "," << field_to_string(row.main_sel_op_version) // - << "," << field_to_string(row.main_sel_op_xor) // - << "," << field_to_string(row.main_sel_q_kernel_lookup) // - << "," << field_to_string(row.main_sel_q_kernel_output_lookup) // - << "," << field_to_string(row.main_sel_resolve_ind_addr_a) // - << "," << field_to_string(row.main_sel_resolve_ind_addr_b) // - << "," << field_to_string(row.main_sel_resolve_ind_addr_c) // - << "," << field_to_string(row.main_sel_resolve_ind_addr_d) // - << "," << field_to_string(row.main_sel_returndata) // - << "," << field_to_string(row.main_sel_rng_16) // - << "," << field_to_string(row.main_sel_rng_8) // - << "," << field_to_string(row.main_sel_slice_gadget) // - << "," << field_to_string(row.main_space_id) // - << "," << field_to_string(row.main_tag_err) // - << "," << field_to_string(row.main_w_in_tag) // - << "," << field_to_string(row.mem_addr) // - << "," << field_to_string(row.mem_clk) // - << "," << field_to_string(row.mem_diff_hi) // - << "," << field_to_string(row.mem_diff_lo) // - << "," << field_to_string(row.mem_diff_mid) // - << "," << field_to_string(row.mem_glob_addr) // - << "," << field_to_string(row.mem_last) // - << "," << field_to_string(row.mem_lastAccess) // - << "," << field_to_string(row.mem_one_min_inv) // - << "," << field_to_string(row.mem_r_in_tag) // - << "," << field_to_string(row.mem_rw) // - << "," << field_to_string(row.mem_sel_mem) // - << "," << field_to_string(row.mem_sel_mov_ia_to_ic) // - << "," << field_to_string(row.mem_sel_mov_ib_to_ic) // - << "," << field_to_string(row.mem_sel_op_a) // - << "," << field_to_string(row.mem_sel_op_b) // - << "," << field_to_string(row.mem_sel_op_c) // - << "," << field_to_string(row.mem_sel_op_cmov) // - << "," << field_to_string(row.mem_sel_op_d) // - << "," << field_to_string(row.mem_sel_op_slice) // - << "," << field_to_string(row.mem_sel_resolve_ind_addr_a) // - << "," << field_to_string(row.mem_sel_resolve_ind_addr_b) // - << "," << field_to_string(row.mem_sel_resolve_ind_addr_c) // - << "," << field_to_string(row.mem_sel_resolve_ind_addr_d) // - << "," << field_to_string(row.mem_sel_rng_chk) // - << "," << field_to_string(row.mem_skip_check_tag) // - << "," << field_to_string(row.mem_space_id) // - << "," << field_to_string(row.mem_tag) // - << "," << field_to_string(row.mem_tag_err) // - << "," << field_to_string(row.mem_tsp) // - << "," << field_to_string(row.mem_val) // - << "," << field_to_string(row.mem_w_in_tag) // - << "," << field_to_string(row.pedersen_clk) // - << "," << field_to_string(row.pedersen_input) // - << "," << field_to_string(row.pedersen_output) // - << "," << field_to_string(row.pedersen_sel_pedersen) // - << "," << field_to_string(row.poseidon2_clk) // - << "," << field_to_string(row.poseidon2_input) // - << "," << field_to_string(row.poseidon2_output) // - << "," << field_to_string(row.poseidon2_sel_poseidon_perm) // - << "," << field_to_string(row.powers_power_of_2) // - << "," << field_to_string(row.sha256_clk) // - << "," << field_to_string(row.sha256_input) // - << "," << field_to_string(row.sha256_output) // - << "," << field_to_string(row.sha256_sel_sha256_compression) // - << "," << field_to_string(row.sha256_state) // - << "," << field_to_string(row.slice_addr) // - << "," << field_to_string(row.slice_clk) // - << "," << field_to_string(row.slice_cnt) // - << "," << field_to_string(row.slice_col_offset) // - << "," << field_to_string(row.slice_one_min_inv) // - << "," << field_to_string(row.slice_sel_cd_cpy) // - << "," << field_to_string(row.slice_sel_mem_active) // - << "," << field_to_string(row.slice_sel_return) // - << "," << field_to_string(row.slice_sel_start) // - << "," << field_to_string(row.slice_space_id) // - << "," << field_to_string(row.slice_val) // - << "," << field_to_string(row.perm_slice_mem) // - << "," << field_to_string(row.perm_main_alu) // - << "," << field_to_string(row.perm_main_bin) // - << "," << field_to_string(row.perm_main_conv) // - << "," << field_to_string(row.perm_main_pos2_perm) // - << "," << field_to_string(row.perm_main_pedersen) // - << "," << field_to_string(row.perm_main_slice) // - << "," << field_to_string(row.perm_main_mem_a) // - << "," << field_to_string(row.perm_main_mem_b) // - << "," << field_to_string(row.perm_main_mem_c) // - << "," << field_to_string(row.perm_main_mem_d) // - << "," << field_to_string(row.perm_main_mem_ind_addr_a) // - << "," << field_to_string(row.perm_main_mem_ind_addr_b) // - << "," << field_to_string(row.perm_main_mem_ind_addr_c) // - << "," << field_to_string(row.perm_main_mem_ind_addr_d) // - << "," << field_to_string(row.lookup_byte_lengths) // - << "," << field_to_string(row.lookup_byte_operations) // - << "," << field_to_string(row.lookup_cd_value) // - << "," << field_to_string(row.lookup_ret_value) // - << "," << field_to_string(row.lookup_opcode_gas) // - << "," << field_to_string(row.range_check_l2_gas_hi) // - << "," << field_to_string(row.range_check_l2_gas_lo) // - << "," << field_to_string(row.range_check_da_gas_hi) // - << "," << field_to_string(row.range_check_da_gas_lo) // - << "," << field_to_string(row.kernel_output_lookup) // - << "," << field_to_string(row.lookup_into_kernel) // - << "," << field_to_string(row.incl_main_tag_err) // - << "," << field_to_string(row.incl_mem_tag_err) // - << "," << field_to_string(row.lookup_mem_rng_chk_lo) // - << "," << field_to_string(row.lookup_mem_rng_chk_mid) // - << "," << field_to_string(row.lookup_mem_rng_chk_hi) // - << "," << field_to_string(row.lookup_pow_2_0) // - << "," << field_to_string(row.lookup_pow_2_1) // - << "," << field_to_string(row.lookup_u8_0) // - << "," << field_to_string(row.lookup_u8_1) // - << "," << field_to_string(row.lookup_u16_0) // - << "," << field_to_string(row.lookup_u16_1) // - << "," << field_to_string(row.lookup_u16_2) // - << "," << field_to_string(row.lookup_u16_3) // - << "," << field_to_string(row.lookup_u16_4) // - << "," << field_to_string(row.lookup_u16_5) // - << "," << field_to_string(row.lookup_u16_6) // - << "," << field_to_string(row.lookup_u16_7) // - << "," << field_to_string(row.lookup_u16_8) // - << "," << field_to_string(row.lookup_u16_9) // - << "," << field_to_string(row.lookup_u16_10) // - << "," << field_to_string(row.lookup_u16_11) // - << "," << field_to_string(row.lookup_u16_12) // - << "," << field_to_string(row.lookup_u16_13) // - << "," << field_to_string(row.lookup_u16_14) // - << "," << field_to_string(row.lookup_div_u16_0) // - << "," << field_to_string(row.lookup_div_u16_1) // - << "," << field_to_string(row.lookup_div_u16_2) // - << "," << field_to_string(row.lookup_div_u16_3) // - << "," << field_to_string(row.lookup_div_u16_4) // - << "," << field_to_string(row.lookup_div_u16_5) // - << "," << field_to_string(row.lookup_div_u16_6) // - << "," << field_to_string(row.lookup_div_u16_7) // - << "," << field_to_string(row.lookup_byte_lengths_counts) // - << "," << field_to_string(row.lookup_byte_operations_counts) // - << "," << field_to_string(row.lookup_cd_value_counts) // - << "," << field_to_string(row.lookup_ret_value_counts) // - << "," << field_to_string(row.lookup_opcode_gas_counts) // - << "," << field_to_string(row.range_check_l2_gas_hi_counts) // - << "," << field_to_string(row.range_check_l2_gas_lo_counts) // - << "," << field_to_string(row.range_check_da_gas_hi_counts) // - << "," << field_to_string(row.range_check_da_gas_lo_counts) // - << "," << field_to_string(row.kernel_output_lookup_counts) // - << "," << field_to_string(row.lookup_into_kernel_counts) // - << "," << field_to_string(row.incl_main_tag_err_counts) // - << "," << field_to_string(row.incl_mem_tag_err_counts) // - << "," << field_to_string(row.lookup_mem_rng_chk_lo_counts) // - << "," << field_to_string(row.lookup_mem_rng_chk_mid_counts) // - << "," << field_to_string(row.lookup_mem_rng_chk_hi_counts) // - << "," << field_to_string(row.lookup_pow_2_0_counts) // - << "," << field_to_string(row.lookup_pow_2_1_counts) // - << "," << field_to_string(row.lookup_u8_0_counts) // - << "," << field_to_string(row.lookup_u8_1_counts) // - << "," << field_to_string(row.lookup_u16_0_counts) // - << "," << field_to_string(row.lookup_u16_1_counts) // - << "," << field_to_string(row.lookup_u16_2_counts) // - << "," << field_to_string(row.lookup_u16_3_counts) // - << "," << field_to_string(row.lookup_u16_4_counts) // - << "," << field_to_string(row.lookup_u16_5_counts) // - << "," << field_to_string(row.lookup_u16_6_counts) // - << "," << field_to_string(row.lookup_u16_7_counts) // - << "," << field_to_string(row.lookup_u16_8_counts) // - << "," << field_to_string(row.lookup_u16_9_counts) // - << "," << field_to_string(row.lookup_u16_10_counts) // - << "," << field_to_string(row.lookup_u16_11_counts) // - << "," << field_to_string(row.lookup_u16_12_counts) // - << "," << field_to_string(row.lookup_u16_13_counts) // - << "," << field_to_string(row.lookup_u16_14_counts) // - << "," << field_to_string(row.lookup_div_u16_0_counts) // - << "," << field_to_string(row.lookup_div_u16_1_counts) // - << "," << field_to_string(row.lookup_div_u16_2_counts) // - << "," << field_to_string(row.lookup_div_u16_3_counts) // - << "," << field_to_string(row.lookup_div_u16_4_counts) // - << "," << field_to_string(row.lookup_div_u16_5_counts) // - << "," << field_to_string(row.lookup_div_u16_6_counts) // - << "," << field_to_string(row.lookup_div_u16_7_counts) // - ; + for (const auto& ff : row.as_vector()) { + os << field_to_string(ff) << ", "; + } + return os; } // Explicit template instantiation. template std::ostream& operator<<(std::ostream& os, AvmFullRow const& row); template std::vector AvmFullRow::names(); +template RefVector AvmFullRow::as_vector() const; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.hpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.hpp index 053deb3a1af..ba078c93ba1 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_full_row.hpp @@ -4,6 +4,8 @@ #include #include +#include "barretenberg/common/ref_vector.hpp" + namespace bb { template struct AvmFullRow { @@ -419,7 +421,10 @@ template struct AvmFullRow { FF lookup_div_u16_6_counts{}; FF lookup_div_u16_7_counts{}; - [[maybe_unused]] static std::vector names(); + RefVector as_vector() const; + + static std::vector names(); + static constexpr size_t SIZE = 411; }; template std::ostream& operator<<(std::ostream& os, AvmFullRow const& row); diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp index 221b3cdee44..36f92d7d79d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp @@ -3,6 +3,7 @@ #include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/commitment_schemes/commitment_key.hpp" #include "barretenberg/common/constexpr_utils.hpp" +#include "barretenberg/common/thread.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" #include "barretenberg/honk/proof_system/permutation_library.hpp" #include "barretenberg/plonk_honk_shared/library/grand_product_library.hpp" @@ -73,12 +74,18 @@ void AvmProver::execute_log_derivative_inverse_round() relation_parameters.gamma = gamm; auto prover_polynomials = ProverPolynomials(*key); + std::vector> tasks; + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { using Relation = std::tuple_element_t; - AVM_TRACK_TIME(Relation::NAME + std::string("_ms"), - (compute_logderivative_inverse( - prover_polynomials, relation_parameters, key->circuit_size))); + tasks.push_back([&]() { + AVM_TRACK_TIME(Relation::NAME + std::string("_ms"), + (compute_logderivative_inverse( + prover_polynomials, relation_parameters, key->circuit_size))); + }); }); + + bb::parallel_for(tasks.size(), [&](size_t i) { tasks[i](); }); } void AvmProver::execute_log_derivative_inverse_commitments_round() diff --git a/barretenberg/cpp/src/barretenberg/vm/tests/avm_bitwise.test.cpp b/barretenberg/cpp/src/barretenberg/vm/tests/avm_bitwise.test.cpp index 55bafff7034..eb75041ec86 100644 --- a/barretenberg/cpp/src/barretenberg/vm/tests/avm_bitwise.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/tests/avm_bitwise.test.cpp @@ -666,7 +666,7 @@ TEST_P(AvmBitwiseNegativeTestsXor, AllNegativeTests) auto trace = trace_builder.finalize(); std::function&& select_row = [](Row r) { return r.main_sel_op_xor == FF(1); }; trace = gen_mutated_trace_bit(trace, std::move(select_row), output, failure_mode); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), failure_string) + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), failure_string); } INSTANTIATE_TEST_SUITE_P(AvmBitwiseNegativeTests, AvmBitwiseNegativeTestsXor, diff --git a/barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.hpp b/barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.hpp index 2a64252f9d8..7eda8f8f8c1 100644 --- a/barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.hpp @@ -6,13 +6,15 @@ #include #define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage) \ - try { \ - code; \ - FAIL() << "An exception was expected"; \ - } catch (const std::exception& e) { \ - std::string message = e.what(); \ - EXPECT_THAT(message, ::testing::HasSubstr(expectedMessage)); \ - } + EXPECT_DEATH( \ + try { \ + code; \ + FAIL() << "An exception was expected"; \ + } catch (const std::exception& e) { \ + std::cerr << e.what(); \ + std::abort(); \ + }, \ + expectedMessage); #define MAIN_ROW_FIELD_EQ(field_name, expression) Field(#field_name, &Row::main_##field_name, expression) #define MEM_ROW_FIELD_EQ(field_name, expression) Field(#field_name, &Row::mem_##field_name, expression) diff --git a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs index 27ae98c7413..e4d2f08534f 100644 --- a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs @@ -1,12 +1,11 @@ // AUTOGENERATED FILE #pragma once +#include #include -#ifndef __wasm__ -#include -#endif #include "barretenberg/common/constexpr_utils.hpp" +#include "barretenberg/common/thread.hpp" #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" #include "barretenberg/stdlib_circuit_builders/circuit_builder_base.hpp" @@ -74,91 +73,73 @@ class {{name}}CircuitBuilder { auto polys = compute_polynomials(); const size_t num_rows = polys.get_polynomial_size(); - - const auto evaluate_relation = [&](const std::string& relation_name, - std::string (*debug_label)(int)) { - typename Relation::SumcheckArrayOfValuesOverSubrelations result; - for (auto& r : result) { - r = 0; - } - constexpr size_t NUM_SUBRELATIONS = result.size(); - - for (size_t i = 0; i < num_rows; ++i) { - Relation::accumulate(result, polys.get_row(i), {}, 1); - - bool x = true; - for (size_t j = 0; j < NUM_SUBRELATIONS; ++j) { - if (result[j] != 0) { - std::string row_name = debug_label(static_cast(j)); - throw_or_abort( - format("Relation ", relation_name, ", subrelation index ", row_name, " failed at row ", i)); - x = false; - } + + // Checks that we will run. + using SignalErrorFn = const std::function&; + std::vector> checks; + + // Add relation checks. + bb::constexpr_for<0, std::tuple_size_v<{{name}}Flavor::MainRelations>, 1>([&]() { + using Relation = std::tuple_element_t; + checks.push_back([&](SignalErrorFn signal_error) { + typename Relation::SumcheckArrayOfValuesOverSubrelations result; + for (auto& r : result) { + r = 0; } - if (!x) { - return false; + constexpr size_t NUM_SUBRELATIONS = result.size(); + + for (size_t r = 0; r < num_rows; ++r) { + Relation::accumulate(result, polys.get_row(r), {}, 1); + for (size_t j = 0; j < NUM_SUBRELATIONS; ++j) { + if (result[j] != 0) { + signal_error(format("Relation ", + Relation::NAME, + ", subrelation ", + Relation::get_subrelation_label(j), + " failed at row ", + r)); + } + } } - } - return true; - }; + }); + }); - const auto evaluate_logderivative = [&](const std::string& lookup_name) { - // Check the logderivative relation - bb::compute_logderivative_inverse< - Flavor, - LogDerivativeSettings>( - polys, params, num_rows); - - typename LogDerivativeSettings::SumcheckArrayOfValuesOverSubrelations - lookup_result; - - for (auto& r : lookup_result) { - r = 0; - } - for (size_t i = 0; i < num_rows; ++i) { - LogDerivativeSettings::accumulate(lookup_result, polys.get_row(i), params, 1); - } - for (auto r : lookup_result) { - if (r != 0) { - throw_or_abort(format("Lookup ", lookup_name, " failed.")); - return false; - } - } - return true; - }; + // Add calculation of logderivatives and lookup/permutation checks. + bb::constexpr_for<0, std::tuple_size_v<{{name}}Flavor::LookupRelations>, 1>([&]() { + using Relation = std::tuple_element_t; + checks.push_back([&, num_rows](SignalErrorFn signal_error) { + // Check the logderivative relation + bb::compute_logderivative_inverse(polys, params, num_rows); - // Check relations - {{#each relations as |rel|}} - auto {{rel}} = [=]() { - return evaluate_relation.template operator()<{{../name}}_vm::{{rel}}>("{{rel}}", {{../name}}_vm::get_relation_label_{{rel}}); - }; - {{/each}} + typename Relation::SumcheckArrayOfValuesOverSubrelations lookup_result; - // Check lookups - {{#each permutations as |l|}} - auto {{l}} = [=]() { - return evaluate_logderivative.template operator()<{{l}}_relation>("{{shoutySnakeCase l}}"); + for (auto& r : lookup_result) { + r = 0; + } + for (size_t r = 0; r < num_rows; ++r) { + Relation::accumulate(lookup_result, polys.get_row(r), params, 1); + } + for (auto r : lookup_result) { + if (r != 0) { + signal_error(format("Lookup ", Relation::NAME, " failed.")); + } + } + }); + }); + + std::string errors; + auto signal_error = [&](const std::string& error) { + // Thread safety first! + static std::mutex m; + std::lock_guard lock(m); + errors += error + "\n"; }; - {{/each}} - - // Evaluate check circuit closures as futures - std::vector> relation_futures; - - {{#each relations as |rel|}} - relation_futures.emplace_back(std::async(std::launch::async, {{rel}})); - {{/each}} - {{#each permutations as |l|}} - relation_futures.emplace_back(std::async(std::launch::async, {{l}})); - {{/each}} - - // Wait for lookup evaluations to complete - for (auto& future : relation_futures) { - if (!future.get()) { - return false; - } + bb::parallel_for(checks.size(), [&](size_t i) { checks[i](signal_error); }); + if (!errors.empty()) { + throw_or_abort(errors); } - return true; + return errors.empty(); } [[nodiscard]] size_t get_num_gates() const { return rows.size(); } diff --git a/bb-pilcom/bb-pil-backend/templates/full_row.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/full_row.cpp.hbs index 8d02439b421..978e8f1b613 100644 --- a/bb-pilcom/bb-pil-backend/templates/full_row.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/full_row.cpp.hbs @@ -25,16 +25,25 @@ template std::vector {{name}}FullRow::names() }; } +template RefVector {{name}}FullRow::as_vector() const { + return RefVector{ + {{#each all_cols as |col|}} + {{col}}, + {{/each}} + }; +} + template std::ostream& operator<<(std::ostream& os, {{name}}FullRow const& row) { - return os << - {{#each all_cols as |col|}} - {{#if @index}}<< "," << {{/if}}field_to_string(row.{{col}}) // - {{/each}}; + for (const auto& ff : row.as_vector()) { + os << field_to_string(ff) << ", "; + } + return os; } // Explicit template instantiation. template std::ostream& operator<<(std::ostream& os, {{name}}FullRow<{{name}}FlavorSettings::FF> const& row); template std::vector {{name}}FullRow<{{name}}FlavorSettings::FF>::names(); +template RefVector {{name}}FullRow<{{name}}FlavorSettings::FF>::as_vector() const; } // namespace bb diff --git a/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs index 17cddb17f25..a9e7f6d3174 100644 --- a/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs @@ -4,6 +4,8 @@ #include #include +#include "barretenberg/common/ref_vector.hpp" + namespace bb { template @@ -12,7 +14,10 @@ struct {{name}}FullRow { FF {{col}}{}; {{/each}} - [[maybe_unused]] static std::vector names(); + RefVector as_vector() const; + + static std::vector names(); + static constexpr size_t SIZE = {{len all_cols}}; }; template std::ostream& operator<<(std::ostream& os, {{name}}FullRow const& row); diff --git a/bb-pilcom/bb-pil-backend/templates/lookup.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/lookup.hpp.hbs index 938d996f3e3..a63eb410e60 100644 --- a/bb-pilcom/bb-pil-backend/templates/lookup.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/lookup.hpp.hbs @@ -53,7 +53,7 @@ class {{lookup_name}}_lookup_settings { template class {{lookup_name}}_relation : public GenericLookupRelation<{{lookup_name}}_lookup_settings, FF_> { public: - static constexpr const char* NAME = "{{lookup_name}}"; + static constexpr const char* NAME = "{{shoutySnakeCase lookup_name}}"; }; template using {{lookup_name}} = GenericLookup<{{lookup_name}}_lookup_settings, FF_>; diff --git a/bb-pilcom/bb-pil-backend/templates/permutation.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/permutation.hpp.hbs index 33cb51d73cc..a854f55a524 100644 --- a/bb-pilcom/bb-pil-backend/templates/permutation.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/permutation.hpp.hbs @@ -38,7 +38,7 @@ class {{perm_name}}_permutation_settings { template class {{perm_name}}_relation : public GenericPermutationRelation<{{perm_name}}_permutation_settings, FF_> { public: - static constexpr const char* NAME = "{{perm_name}}"; + static constexpr const char* NAME = "{{shoutySnakeCase perm_name}}"; }; template using {{perm_name}} = GenericPermutation<{{perm_name}}_permutation_settings, FF_>; diff --git a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs index 53990fad42d..a843c8fb63f 100644 --- a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs @@ -3,6 +3,7 @@ #include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/commitment_schemes/commitment_key.hpp" #include "barretenberg/common/constexpr_utils.hpp" +#include "barretenberg/common/thread.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" #include "barretenberg/honk/proof_system/permutation_library.hpp" #include "barretenberg/plonk_honk_shared/library/grand_product_library.hpp" @@ -67,19 +68,25 @@ void {{name}}Prover::execute_wire_commitments_round() } } -void {{name}}Prover::execute_log_derivative_inverse_round() +void AvmProver::execute_log_derivative_inverse_round() { auto [beta, gamm] = transcript->template get_challenges("beta", "gamma"); relation_parameters.beta = beta; relation_parameters.gamma = gamm; auto prover_polynomials = ProverPolynomials(*key); + std::vector> tasks; + bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { using Relation = std::tuple_element_t; - AVM_TRACK_TIME(Relation::NAME + std::string("_ms"), - (compute_logderivative_inverse( - prover_polynomials, relation_parameters, key->circuit_size))); + tasks.push_back([&]() { + AVM_TRACK_TIME(Relation::NAME + std::string("_ms"), + (compute_logderivative_inverse( + prover_polynomials, relation_parameters, key->circuit_size))); + }); }); + + bb::parallel_for(tasks.size(), [&](size_t i) { tasks[i](); }); } void {{name}}Prover::execute_log_derivative_inverse_commitments_round() diff --git a/bb-pilcom/bb-pil-backend/templates/relation.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/relation.hpp.hbs index 8e5b28f44de..4b80b824cf6 100644 --- a/bb-pilcom/bb-pil-backend/templates/relation.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/relation.hpp.hbs @@ -12,16 +12,6 @@ template struct {{upperCamelCase name}}Row { {{/each}} }; -inline std::string get_relation_label_{{name}}(int index) { - switch (index) { - {{#each labels as |label|}} - case {{label.0}}: - return "{{label.1}}"; - {{/each}} - } - return std::to_string(index); -} - template class {{name}}Impl { public: using FF = FF_; @@ -48,6 +38,19 @@ template class {{name}}Impl { } }; -template using {{name}} = Relation<{{name}}Impl>; +template class {{name}} : public Relation<{{name}}Impl> { + public: + static constexpr const char* NAME = "{{name}}"; + + static std::string get_subrelation_label(size_t index) { + switch (index) { + {{#each labels as |label|}} + case {{label.0}}: + return "{{label.1}}"; + {{/each}} + } + return std::to_string(index); + } +}; } // namespace bb::{{root_name}}_vm \ No newline at end of file