From b566420a8e115660f9f29c4aedb26e1b66946523 Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 14:45:08 +0000 Subject: [PATCH 1/6] Initial build analysis. --- cpp/build-analysis | 250 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 cpp/build-analysis diff --git a/cpp/build-analysis b/cpp/build-analysis new file mode 100644 index 0000000000..0bdf2fddb5 --- /dev/null +++ b/cpp/build-analysis @@ -0,0 +1,250 @@ +Analyzing build trace from 'artifacts'... +**** Time summary: +Compilation (642 times): + Parsing (frontend): 1544.8 s + Codegen & opts (backend): 701.2 s + +**** Files that took longest to parse (compiler frontend): + 19047 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/composer/ultra_composer.test.cpp.o + 18871 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/bn254/pairing.test.cpp.o + 18738 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/sumcheck/sumcheck_round.test.cpp.o + 18491 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/composer/ultra_composer.cpp.o + 17993 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/prover_library.cpp.o + 17392 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/ultra_verifier.cpp.o + 17341 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/ultra_prover.cpp.o + 17276 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/sumcheck/sumcheck.test.cpp.o + 17273 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/composer/standard_composer.cpp.o + 17269 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/verifier.cpp.o + +**** Files that took longest to codegen (compiler backend): + 24979 ms: build/src/barretenberg/stdlib/recursion/CMakeFiles/stdlib_recursion_test_objects.dir/verifier/verifier.test.cpp.o + 21546 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/secp256k1/secp256k1.test.cpp.o + 21134 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/secp256r1/secp256r1.test.cpp.o + 18730 ms: build/src/barretenberg/stdlib/encryption/ecdsa/CMakeFiles/stdlib_ecdsa_test_objects.dir/ecdsa.test.cpp.o + 17469 ms: build/src/barretenberg/stdlib/primitives/CMakeFiles/stdlib_primitives_test_objects.dir/biggroup/biggroup.test.cpp.o + 15415 ms: build/src/barretenberg/stdlib/recursion/CMakeFiles/stdlib_recursion_test_objects.dir/verifier/verifier_turbo.test.cpp.o + 15169 ms: build/src/barretenberg/stdlib/primitives/CMakeFiles/stdlib_primitives_test_objects.dir/bigfield/bigfield.test.cpp.o + 12206 ms: build/src/barretenberg/proof_system/CMakeFiles/proof_system_objects.dir/plookup_tables/plookup_tables.cpp.o + 11997 ms: build/src/barretenberg/solidity_helpers/CMakeFiles/stdlib_solidity_helpers_objects.dir/key_gen.cpp.o + 11960 ms: build/src/barretenberg/solidity_helpers/CMakeFiles/solidity_key_gen.dir/key_gen.cpp.o + +**** Templates that took longest to instantiate: +194442 ms: proof_system::honk::flavor::instantiate_barycentric_utils (280 times, avg 26 ms) + 7410 ms: proof_system::honk::flavor::create_relation_univariates_container (280 times, avg 23 ms) + 5658 ms: std::vector::operator= (146 times, avg 38 ms) + 5567 ms: std::vector::opera... (146 times, avg 38 ms) + 4814 ms: proof_system::honk::flavor::create_relation_univariates_container::operator% (254 times, avg 18 ms) + 4640 ms: numeric::uintx::divmod (254 times, avg 18 ms) + 4586 ms: std::vector::operator= (146 times, avg 31 ms) + 4500 ms: proof_system::honk::flavor::create_relation_univariates_container (386 times, avg 913 ms) +339537 ms: proof_system::honk::flavor::instantiate_barycentric_utils<$> (67 times, avg 5067 ms) + 24913 ms: std::__and_<$> (25623 times, avg 0 ms) + 21688 ms: std::__or_<$> (30686 times, avg 0 ms) + 21277 ms: testing::internal::TypeParameterizedTest<$>::Register (307 times, avg 69 ms) + 19697 ms: testing::internal::TestFactoryImpl<$>::CreateTest (768 times, avg 25 ms) + 18073 ms: std::copy<$> (9419 times, avg 1 ms) + 17849 ms: std::vector<$> (7593 times, avg 2 ms) + 14742 ms: std::tuple<$> (2097 times, avg 7 ms) + 14371 ms: std::__copy_move_a<$> (7990 times, avg 1 ms) + 14363 ms: std::reverse_iterator<$> (567 times, avg 25 ms) + 14035 ms: std::vector<$>::emplace_back<$> (3075 times, avg 4 ms) + 13997 ms: std::__uninitialized_copy_a<$> (5426 times, avg 2 ms) + 13845 ms: std::unique_ptr<$> (1013 times, avg 13 ms) + 13311 ms: std::_Destroy<$> (6744 times, avg 1 ms) + 13133 ms: std::vector<$>::vector (3303 times, avg 3 ms) + 12635 ms: std::uninitialized_copy<$> (5003 times, avg 2 ms) + 12576 ms: std::vector<$>::_M_realloc_insert<$> (3817 times, avg 3 ms) + 12541 ms: proof_system::plonk::widget::GenericVerifierWidget<$>::compute_quoti... (742 times, avg 16 ms) + 11910 ms: proof_system::honk::flavor::create_relation_univariates_container<$> (67 times, avg 177 ms) + 11180 ms: std::__uniq_ptr_data<$> (1013 times, avg 11 ms) + 11046 ms: std::__uniq_ptr_impl<$> (1013 times, avg 10 ms) + 10734 ms: std::is_nothrow_copy_constructible<$> (10059 times, avg 1 ms) + 10457 ms: std::pair<$> (4487 times, avg 2 ms) + 10383 ms: std::vector<$>::~vector (3454 times, avg 3 ms) + 10034 ms: proof_system::plonk::widget::PlookupArithmeticKernel<$>::compute_non... (89 times, avg 112 ms) + 9757 ms: std::__niter_base<$> (8422 times, avg 1 ms) + 9099 ms: std::_Vector_base<$> (7435 times, avg 1 ms) + 8996 ms: std::_Rb_tree<$>::_M_erase (1355 times, avg 6 ms) + 8875 ms: __gnu_cxx::char_traits<$>::move (1410 times, avg 6 ms) + +**** Functions that took longest to compile: + 1081 ms: proof_system::plonk::stdlib::element::Register(char const*, t... (794 times, avg 15 ms) + 7204 ms: proof_system::plonk::stdlib::element<$>::lookup_table_plookup<$>::lo... (30 times, avg 240 ms) + 6508 ms: proof_system::plonk::VerifierPermutationWidget<$>::compute_quotient_... (76 times, avg 85 ms) + 6154 ms: proof_system::plonk::VerifierPlookupWidget<$>::compute_quotient_eval... (76 times, avg 80 ms) + 2690 ms: numeric::uintx<$>::divmod(numeric::uintx<$> const&) const (127 times, avg 21 ms) + 2229 ms: barretenberg::group_elements::element<$>::self_dbl() (81 times, avg 27 ms) + 2148 ms: barretenberg::field<$>::field(int) (241 times, avg 8 ms) + 2080 ms: proof_system::plonk::stdlib::bigfield<$>::unsafe_evaluate_multiply_a... (26 times, avg 80 ms) + 2075 ms: barretenberg::field<$>::invert() const (195 times, avg 10 ms) + 2069 ms: barretenberg::group_elements::element::unsafe_evaluate_multiple_m... (20 times, avg 96 ms) + 1775 ms: testing::internal::SuiteApiResolver<$>::GetSetUpCaseOrSuite(char con... (888 times, avg 1 ms) + 1727 ms: proof_system::plonk::stdlib::element<$>::batch_lookup_table_plookup<... (6 times, avg 287 ms) + 1637 ms: testing::internal::SuiteApiResolver<$>::GetTearDownCaseOrSuite(char ... (888 times, avg 1 ms) + 1344 ms: testing::internal::TestFactoryImpl<$>::CreateTest() (1519 times, avg 0 ms) + 1115 ms: proof_system::CircuitBuilderBase<$>::CircuitBuilderBase(std::vector<... (83 times, avg 13 ms) + 1114 ms: std::__cxx11::basic_string<$>::_M_replace(unsigned long, unsigned lo... (187 times, avg 5 ms) + 1023 ms: barretenberg::field<$>::field(numeric::uint256_t const&) (209 times, avg 4 ms) + 1008 ms: barretenberg::group_elements::element proof_s... (8 times, avg 124 ms) + 942 ms: proof_system::CircuitBuilderBase<$>::add_variable(barretenberg::fiel... (109 times, avg 8 ms) + 910 ms: barretenberg::group_elements::element<$>::mul_with_endomorphism(barr... (47 times, avg 19 ms) + 883 ms: std::array<$> proof_system::plonk::stdlib::element<$>::create_group_... (34 times, avg 25 ms) + 839 ms: proof_system::plonk::stdlib::bigfield<$>::conditional_negate(proof_s... (18 times, avg 46 ms) + 799 ms: proof_system::plonk::stdlib::element<$>::multiple_montgomery_ladder(... (15 times, avg 53 ms) + 798 ms: numeric::uintx::operator>>(unsigned long) const (107 times, avg 7 ms) + 792 ms: numeric::uintx::operator<<(unsigned long) const (107 times, avg 7 ms) + 776 ms: std::vector<$>::~vector() (486 times, avg 1 ms) + 776 ms: std::__cxx11::basic_string<$>::_M_mutate(unsigned long, unsigned lon... (190 times, avg 4 ms) + 745 ms: barretenberg::field<$> proof_system::plonk::compute_public_input_del... (77 times, avg 9 ms) + +**** Expensive headers: +247760 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp (included 32 times, avg 7742 ms), included via: + ultra_composer.cpp.o ultra_composer.hpp ultra_prover.hpp (13824 ms) + ultra_prover.cpp.o ultra_prover.hpp (12521 ms) + ultra_verifier.cpp.o ultra_verifier.hpp (12506 ms) + ultra_composer.test.cpp.o ultra_composer.hpp ultra_prover.hpp (12175 ms) + ultra_relation_consistency.test.cpp.o (10905 ms) + join_split.cpp.o join_split.hpp types.hpp ultra_composer.hpp ultra_prover.hpp (9947 ms) + ... + +195126 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.hpp (included 20 times, avg 9756 ms), included via: + ultra_composer.cpp.o (17380 ms) + ultra_composer.test.cpp.o (16168 ms) + join_split.cpp.o join_split.hpp types.hpp (13101 ms) + compute_nullifier.cpp.o compute_nullifier.hpp types.hpp (12366 ms) + compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp types.hpp (12056 ms) + join_split_tx.test.cpp.o join_split.hpp types.hpp (11866 ms) + ... + +177864 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/ecc/fields/field.hpp (included 253 times, avg 703 ms), included via: + serialize.test.cpp.o (2017 ms) + plookup.test.cpp.o byte_array.hpp bool.hpp witness.hpp fr.hpp (1275 ms) + schnorr.cpp.o schnorr.hpp bool.hpp witness.hpp fr.hpp (1215 ms) + c_bind.cpp.o io.hpp bn254.hpp fq.hpp (1204 ms) + sha256.cpp.o sha256.hpp byte_array.hpp bool.hpp witness.hpp fr.hpp (1172 ms) + wnaf.test.cpp.o fr.hpp (1171 ms) + ... + +173277 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp (included 35 times, avg 4950 ms), included via: + permutation_lib.test.cpp.o (9151 ms) + verifier.cpp.o verifier.hpp (8821 ms) + standard_composer.cpp.o standard_composer.hpp prover.hpp (8716 ms) + flavor.test.cpp.o (8535 ms) + prover.cpp.o prover.hpp (8508 ms) + relation_consistency.test.cpp.o (7685 ms) + ... + +163663 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/proof_system/prover.hpp (included 29 times, avg 5643 ms), included via: + standard_composer.cpp.o standard_composer.hpp (16258 ms) + prover.cpp.o (15441 ms) + standard_composer.test.cpp.o standard_composer.hpp (14003 ms) + relation_correctness.test.cpp.o standard_composer.hpp (13803 ms) + transcript.test.cpp.o standard_composer.hpp (13580 ms) + sumcheck.test.cpp.o standard_composer.hpp (12889 ms) + ... + +161314 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/join_split_example/types.hpp (included 14 times, avg 11522 ms), included via: + join_split.cpp.o join_split.hpp (13542 ms) + compute_nullifier.cpp.o compute_nullifier.hpp (12811 ms) + compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp (12507 ms) + join_split_tx.test.cpp.o join_split.hpp (12356 ms) + join_split.test.cpp.o (11920 ms) + value_note.test.cpp.o (11677 ms) + ... + +155946 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp (included 21 times, avg 7426 ms), included via: + ultra_composer.cpp.o ultra_composer.hpp (13946 ms) + ultra_prover.cpp.o (12597 ms) + ultra_composer.test.cpp.o ultra_composer.hpp (12302 ms) + join_split.cpp.o join_split.hpp types.hpp ultra_composer.hpp (10015 ms) + compute_nullifier.cpp.o compute_nullifier.hpp types.hpp ultra_composer.hpp (9229 ms) + compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp types.hpp ultra_composer.hpp (8838 ms) + ... + +155068 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp (included 146 times, avg 1062 ms), included via: + ultra_circuit_builder.cpp.o (3310 ms) + blake2s.test.cpp.o (2727 ms) + rom_table.test.cpp.o (1641 ms) + ram_table.test.cpp.o (1601 ms) + pedersen.cpp.o pedersen_gates.hpp byte_array.hpp safe_uint.hpp circuit_builders.hpp (1460 ms) + bool.cpp.o circuit_builders.hpp (1420 ms) + ... + +140205 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/ecc/curves/bn254/fr.hpp (included 244 times, avg 574 ms), included via: + barycentric_data.test.cpp.o (2097 ms) + plookup.test.cpp.o byte_array.hpp bool.hpp witness.hpp (2069 ms) + polynomial_arithmetic.cpp.o polynomial_arithmetic.hpp evaluation_domain.hpp (2060 ms) + pedersen_plookup.cpp.o pedersen_plookup.hpp field.hpp witness.hpp (2031 ms) + packed_byte_array.cpp.o packed_byte_array.hpp bool.hpp witness.hpp (1987 ms) + inner_proof_data.cpp.o inner_proof_data.hpp (1986 ms) + ... + +132092 ms: /usr/include/c++/10/algorithm (included 292 times, avg 452 ms), included via: + hmac.test.cpp.o hmac.hpp serialize.hpp log.hpp (1294 ms) + c_bind.cpp.o c_bind.hpp serialize.hpp log.hpp (1133 ms) + io.test.cpp.o mem.hpp log.hpp (1131 ms) + c_bind.cpp.o c_bind.hpp serialize.hpp log.hpp (1113 ms) + ipa.test.cpp.o mem.hpp log.hpp (1095 ms) + external.bench.cpp.o benchmark.h (1079 ms) + ... + + done in 0.4s. From f850e8ebeb95fbc9d9a73678555b280158425889 Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 15:49:21 +0000 Subject: [PATCH 2/6] Fix erroneous field type. --- cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp b/cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp index 107d889d4c..cdc247afa3 100644 --- a/cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp +++ b/cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp @@ -14,7 +14,7 @@ WASM_EXPORT void ecc_secp256k1__mul(uint8_t const* point_buf, uint8_t const* sca WASM_EXPORT void ecc_secp256k1__get_random_scalar_mod_circuit_modulus(uint8_t* result) { - barretenberg::fr output = barretenberg::fr::random_element(); + secp256k1::fr output = secp256k1::fr::random_element(); write(result, output); } @@ -22,7 +22,7 @@ WASM_EXPORT void ecc_secp256k1__reduce512_buffer_mod_circuit_modulus(uint8_t* in { uint512_t bigint_input = from_buffer(input); - uint512_t barretenberg_modulus(barretenberg::fr::modulus); + uint512_t barretenberg_modulus(secp256k1::fr::modulus); uint512_t target_output = bigint_input % barretenberg_modulus; write(result, target_output.lo); From 1a2ac78091c06862f06f86b864cfeaeca85b7637 Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 15:51:00 +0000 Subject: [PATCH 3/6] Remove unused includes and functions. --- .../ecc/curves/secp256k1/secp256k1.hpp | 25 ------------------- .../ecc/curves/secp256r1/secp256r1.hpp | 25 ------------------- 2 files changed, 50 deletions(-) diff --git a/cpp/src/barretenberg/ecc/curves/secp256k1/secp256k1.hpp b/cpp/src/barretenberg/ecc/curves/secp256k1/secp256k1.hpp index 070222911c..9761389b33 100644 --- a/cpp/src/barretenberg/ecc/curves/secp256k1/secp256k1.hpp +++ b/cpp/src/barretenberg/ecc/curves/secp256k1/secp256k1.hpp @@ -1,36 +1,11 @@ #pragma once -#include "barretenberg/numeric/uint256/uint256.hpp" -#include "barretenberg/numeric/uintx/uintx.hpp" - #include "../../fields/field.hpp" #include "../../groups/group.hpp" -#include "../bn254/fq.hpp" -#include "../bn254/fr.hpp" #include "../types.hpp" namespace secp256k1 { -constexpr uint256_t get_r_squared(const uint256_t prime_256) -{ - uint512_t R(0, 1); - uint1024_t R_1024 = uint1024_t(R); - uint1024_t R_squared = R_1024 * R_1024; - uint1024_t modulus = uint1024_t(uint512_t(prime_256)); - - uint1024_t R_squared_mod_p = R_squared % modulus; - return R_squared_mod_p.lo.lo; -} - -constexpr uint64_t get_r_inv(const uint256_t prime_256) -{ - uint512_t r{ 0, 1 }; - // -(1/q) mod r - uint512_t q{ -prime_256, 0 }; - uint256_t q_inv = q.invmod(r).lo; - return (q_inv).data[0]; -} - struct Secp256k1FqParams { static constexpr uint64_t modulus_0 = 0xFFFFFFFEFFFFFC2FULL; static constexpr uint64_t modulus_1 = 0xFFFFFFFFFFFFFFFFULL; diff --git a/cpp/src/barretenberg/ecc/curves/secp256r1/secp256r1.hpp b/cpp/src/barretenberg/ecc/curves/secp256r1/secp256r1.hpp index 2d04e47c90..ef6b431ab4 100644 --- a/cpp/src/barretenberg/ecc/curves/secp256r1/secp256r1.hpp +++ b/cpp/src/barretenberg/ecc/curves/secp256r1/secp256r1.hpp @@ -1,35 +1,10 @@ #pragma once -#include "barretenberg/numeric/uint256/uint256.hpp" -#include "barretenberg/numeric/uintx/uintx.hpp" - #include "../../fields/field.hpp" #include "../../groups/group.hpp" -#include "../bn254/fq.hpp" -#include "../bn254/fr.hpp" namespace secp256r1 { -constexpr uint256_t get_r_squared(const uint256_t prime_256) -{ - uint512_t R(0, 1); - uint1024_t R_1024 = uint1024_t(R); - uint1024_t R_squared = R_1024 * R_1024; - uint1024_t modulus = uint1024_t(uint512_t(prime_256)); - - uint1024_t R_squared_mod_p = R_squared % modulus; - return R_squared_mod_p.lo.lo; -} - -constexpr uint64_t get_r_inv(const uint256_t prime_256) -{ - uint512_t r{ 0, 1 }; - // -(1/q) mod r - uint512_t q{ -prime_256, 0 }; - uint256_t q_inv = q.invmod(r).lo; - return (q_inv).data[0]; -} - struct Secp256r1FqParams { static constexpr uint64_t modulus_0 = 0xFFFFFFFFFFFFFFFFULL; static constexpr uint64_t modulus_1 = 0x00000000FFFFFFFFULL; From ce6445413b43e9690812aa45e9b49b2a342087bc Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 15:51:39 +0000 Subject: [PATCH 4/6] Remove heavy instantiations. --- cpp/src/barretenberg/honk/flavor/standard.hpp | 3 --- cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp | 3 --- cpp/src/barretenberg/honk/flavor/ultra.hpp | 3 --- cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp | 3 --- 4 files changed, 12 deletions(-) diff --git a/cpp/src/barretenberg/honk/flavor/standard.hpp b/cpp/src/barretenberg/honk/flavor/standard.hpp index 47c2d3b6da..a61f2c06af 100644 --- a/cpp/src/barretenberg/honk/flavor/standard.hpp +++ b/cpp/src/barretenberg/honk/flavor/standard.hpp @@ -62,9 +62,6 @@ class Standard { static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1; static constexpr size_t NUM_RELATIONS = std::tuple_size::value; - // Instantiate the BarycentricData needed to extend each Relation Univariate - static_assert(instantiate_barycentric_utils()); - // define the containers for storing the contributions from each relation in Sumcheck using RelationUnivariates = decltype(create_relation_univariates_container()); using RelationValues = decltype(create_relation_values_container()); diff --git a/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp b/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp index b1d17e252d..7d63df89bd 100644 --- a/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp +++ b/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp @@ -53,9 +53,6 @@ class StandardGrumpkin { static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1; static constexpr size_t NUM_RELATIONS = std::tuple_size::value; - // Instantiate the BarycentricData needed to extend each Relation Univariate - static_assert(instantiate_barycentric_utils()); - // define the containers for storing the contributions from each relation in Sumcheck using RelationUnivariates = decltype(create_relation_univariates_container()); using RelationValues = decltype(create_relation_values_container()); diff --git a/cpp/src/barretenberg/honk/flavor/ultra.hpp b/cpp/src/barretenberg/honk/flavor/ultra.hpp index c7b207afd4..a98405ab53 100644 --- a/cpp/src/barretenberg/honk/flavor/ultra.hpp +++ b/cpp/src/barretenberg/honk/flavor/ultra.hpp @@ -67,9 +67,6 @@ class Ultra { static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1; static constexpr size_t NUM_RELATIONS = std::tuple_size::value; - // Instantiate the BarycentricData needed to extend each Relation Univariate - static_assert(instantiate_barycentric_utils()); - // define the container for storing the univariate contribution from each relation in Sumcheck using RelationUnivariates = decltype(create_relation_univariates_container()); using RelationValues = decltype(create_relation_values_container()); diff --git a/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp b/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp index 05ed113d80..5619db3603 100644 --- a/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp +++ b/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp @@ -65,9 +65,6 @@ class UltraGrumpkin { static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1; static constexpr size_t NUM_RELATIONS = std::tuple_size::value; - // Instantiate the BarycentricData needed to extend each Relation Univariate - static_assert(instantiate_barycentric_utils()); - // define the container for storing the univariate contribution from each relation in Sumcheck using RelationUnivariates = decltype(create_relation_univariates_container()); using RelationValues = decltype(create_relation_values_container()); From c9dc5896857920030bbd88490f541fa4a9fed625 Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 15:52:05 +0000 Subject: [PATCH 5/6] Batch inversion at compile time. --- .../sumcheck/polynomials/barycentric_data.hpp | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/cpp/src/barretenberg/honk/sumcheck/polynomials/barycentric_data.hpp b/cpp/src/barretenberg/honk/sumcheck/polynomials/barycentric_data.hpp index f7e13ceabf..bb63d8be9e 100644 --- a/cpp/src/barretenberg/honk/sumcheck/polynomials/barycentric_data.hpp +++ b/cpp/src/barretenberg/honk/sumcheck/polynomials/barycentric_data.hpp @@ -51,6 +51,34 @@ template class BarycentricData return result; } + static constexpr std::array batch_invert( + const std::array& coeffs) + { + constexpr size_t n = domain_size * num_evals; + std::array temporaries{}; + std::array skipped{}; + Fr accumulator = 1; + for (size_t i = 0; i < n; ++i) { + temporaries[i] = accumulator; + if (coeffs[i] == 0) { + skipped[i] = true; + } else { + skipped[i] = false; + accumulator *= coeffs[i]; + } + } + accumulator = Fr(1) / accumulator; + std::array result{}; + Fr T0; + for (size_t i = n - 1; i < n; --i) { + if (!skipped[i]) { + T0 = accumulator * temporaries[i]; + accumulator *= coeffs[i]; + result[i] = T0; + } + } + return result; + } // for each x_k in the big domain, build set of domain size-many denominator inverses // 1/(d_i*(x_k - x_j)). will multiply against each of these (rather than to divide by something) // for each barycentric evaluation @@ -62,11 +90,10 @@ template class BarycentricData for (size_t j = 0; j < domain_size; ++j) { Fr inv = lagrange_denominators[j]; inv *= (big_domain[k] - big_domain[j]); - inv = Fr(1) / inv; // prob have self_inverse method; should be part of Field concept result[k * domain_size + j] = inv; } } - return result; + return batch_invert(result); } // get full numerator values From d4eb09e383a69f1489622fc39f3c311167cb7170 Mon Sep 17 00:00:00 2001 From: codygunton Date: Mon, 3 Jul 2023 16:17:26 +0000 Subject: [PATCH 6/6] Remove build analysis --- cpp/build-analysis | 250 --------------------------------------------- 1 file changed, 250 deletions(-) delete mode 100644 cpp/build-analysis diff --git a/cpp/build-analysis b/cpp/build-analysis deleted file mode 100644 index 0bdf2fddb5..0000000000 --- a/cpp/build-analysis +++ /dev/null @@ -1,250 +0,0 @@ -Analyzing build trace from 'artifacts'... -**** Time summary: -Compilation (642 times): - Parsing (frontend): 1544.8 s - Codegen & opts (backend): 701.2 s - -**** Files that took longest to parse (compiler frontend): - 19047 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/composer/ultra_composer.test.cpp.o - 18871 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/bn254/pairing.test.cpp.o - 18738 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/sumcheck/sumcheck_round.test.cpp.o - 18491 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/composer/ultra_composer.cpp.o - 17993 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/prover_library.cpp.o - 17392 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/ultra_verifier.cpp.o - 17341 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/ultra_prover.cpp.o - 17276 ms: build/src/barretenberg/honk/CMakeFiles/honk_test_objects.dir/sumcheck/sumcheck.test.cpp.o - 17273 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/composer/standard_composer.cpp.o - 17269 ms: build/src/barretenberg/honk/CMakeFiles/honk_objects.dir/proof_system/verifier.cpp.o - -**** Files that took longest to codegen (compiler backend): - 24979 ms: build/src/barretenberg/stdlib/recursion/CMakeFiles/stdlib_recursion_test_objects.dir/verifier/verifier.test.cpp.o - 21546 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/secp256k1/secp256k1.test.cpp.o - 21134 ms: build/src/barretenberg/ecc/CMakeFiles/ecc_test_objects.dir/curves/secp256r1/secp256r1.test.cpp.o - 18730 ms: build/src/barretenberg/stdlib/encryption/ecdsa/CMakeFiles/stdlib_ecdsa_test_objects.dir/ecdsa.test.cpp.o - 17469 ms: build/src/barretenberg/stdlib/primitives/CMakeFiles/stdlib_primitives_test_objects.dir/biggroup/biggroup.test.cpp.o - 15415 ms: build/src/barretenberg/stdlib/recursion/CMakeFiles/stdlib_recursion_test_objects.dir/verifier/verifier_turbo.test.cpp.o - 15169 ms: build/src/barretenberg/stdlib/primitives/CMakeFiles/stdlib_primitives_test_objects.dir/bigfield/bigfield.test.cpp.o - 12206 ms: build/src/barretenberg/proof_system/CMakeFiles/proof_system_objects.dir/plookup_tables/plookup_tables.cpp.o - 11997 ms: build/src/barretenberg/solidity_helpers/CMakeFiles/stdlib_solidity_helpers_objects.dir/key_gen.cpp.o - 11960 ms: build/src/barretenberg/solidity_helpers/CMakeFiles/solidity_key_gen.dir/key_gen.cpp.o - -**** Templates that took longest to instantiate: -194442 ms: proof_system::honk::flavor::instantiate_barycentric_utils (280 times, avg 26 ms) - 7410 ms: proof_system::honk::flavor::create_relation_univariates_container (280 times, avg 23 ms) - 5658 ms: std::vector::operator= (146 times, avg 38 ms) - 5567 ms: std::vector::opera... (146 times, avg 38 ms) - 4814 ms: proof_system::honk::flavor::create_relation_univariates_container::operator% (254 times, avg 18 ms) - 4640 ms: numeric::uintx::divmod (254 times, avg 18 ms) - 4586 ms: std::vector::operator= (146 times, avg 31 ms) - 4500 ms: proof_system::honk::flavor::create_relation_univariates_container (386 times, avg 913 ms) -339537 ms: proof_system::honk::flavor::instantiate_barycentric_utils<$> (67 times, avg 5067 ms) - 24913 ms: std::__and_<$> (25623 times, avg 0 ms) - 21688 ms: std::__or_<$> (30686 times, avg 0 ms) - 21277 ms: testing::internal::TypeParameterizedTest<$>::Register (307 times, avg 69 ms) - 19697 ms: testing::internal::TestFactoryImpl<$>::CreateTest (768 times, avg 25 ms) - 18073 ms: std::copy<$> (9419 times, avg 1 ms) - 17849 ms: std::vector<$> (7593 times, avg 2 ms) - 14742 ms: std::tuple<$> (2097 times, avg 7 ms) - 14371 ms: std::__copy_move_a<$> (7990 times, avg 1 ms) - 14363 ms: std::reverse_iterator<$> (567 times, avg 25 ms) - 14035 ms: std::vector<$>::emplace_back<$> (3075 times, avg 4 ms) - 13997 ms: std::__uninitialized_copy_a<$> (5426 times, avg 2 ms) - 13845 ms: std::unique_ptr<$> (1013 times, avg 13 ms) - 13311 ms: std::_Destroy<$> (6744 times, avg 1 ms) - 13133 ms: std::vector<$>::vector (3303 times, avg 3 ms) - 12635 ms: std::uninitialized_copy<$> (5003 times, avg 2 ms) - 12576 ms: std::vector<$>::_M_realloc_insert<$> (3817 times, avg 3 ms) - 12541 ms: proof_system::plonk::widget::GenericVerifierWidget<$>::compute_quoti... (742 times, avg 16 ms) - 11910 ms: proof_system::honk::flavor::create_relation_univariates_container<$> (67 times, avg 177 ms) - 11180 ms: std::__uniq_ptr_data<$> (1013 times, avg 11 ms) - 11046 ms: std::__uniq_ptr_impl<$> (1013 times, avg 10 ms) - 10734 ms: std::is_nothrow_copy_constructible<$> (10059 times, avg 1 ms) - 10457 ms: std::pair<$> (4487 times, avg 2 ms) - 10383 ms: std::vector<$>::~vector (3454 times, avg 3 ms) - 10034 ms: proof_system::plonk::widget::PlookupArithmeticKernel<$>::compute_non... (89 times, avg 112 ms) - 9757 ms: std::__niter_base<$> (8422 times, avg 1 ms) - 9099 ms: std::_Vector_base<$> (7435 times, avg 1 ms) - 8996 ms: std::_Rb_tree<$>::_M_erase (1355 times, avg 6 ms) - 8875 ms: __gnu_cxx::char_traits<$>::move (1410 times, avg 6 ms) - -**** Functions that took longest to compile: - 1081 ms: proof_system::plonk::stdlib::element::Register(char const*, t... (794 times, avg 15 ms) - 7204 ms: proof_system::plonk::stdlib::element<$>::lookup_table_plookup<$>::lo... (30 times, avg 240 ms) - 6508 ms: proof_system::plonk::VerifierPermutationWidget<$>::compute_quotient_... (76 times, avg 85 ms) - 6154 ms: proof_system::plonk::VerifierPlookupWidget<$>::compute_quotient_eval... (76 times, avg 80 ms) - 2690 ms: numeric::uintx<$>::divmod(numeric::uintx<$> const&) const (127 times, avg 21 ms) - 2229 ms: barretenberg::group_elements::element<$>::self_dbl() (81 times, avg 27 ms) - 2148 ms: barretenberg::field<$>::field(int) (241 times, avg 8 ms) - 2080 ms: proof_system::plonk::stdlib::bigfield<$>::unsafe_evaluate_multiply_a... (26 times, avg 80 ms) - 2075 ms: barretenberg::field<$>::invert() const (195 times, avg 10 ms) - 2069 ms: barretenberg::group_elements::element::unsafe_evaluate_multiple_m... (20 times, avg 96 ms) - 1775 ms: testing::internal::SuiteApiResolver<$>::GetSetUpCaseOrSuite(char con... (888 times, avg 1 ms) - 1727 ms: proof_system::plonk::stdlib::element<$>::batch_lookup_table_plookup<... (6 times, avg 287 ms) - 1637 ms: testing::internal::SuiteApiResolver<$>::GetTearDownCaseOrSuite(char ... (888 times, avg 1 ms) - 1344 ms: testing::internal::TestFactoryImpl<$>::CreateTest() (1519 times, avg 0 ms) - 1115 ms: proof_system::CircuitBuilderBase<$>::CircuitBuilderBase(std::vector<... (83 times, avg 13 ms) - 1114 ms: std::__cxx11::basic_string<$>::_M_replace(unsigned long, unsigned lo... (187 times, avg 5 ms) - 1023 ms: barretenberg::field<$>::field(numeric::uint256_t const&) (209 times, avg 4 ms) - 1008 ms: barretenberg::group_elements::element proof_s... (8 times, avg 124 ms) - 942 ms: proof_system::CircuitBuilderBase<$>::add_variable(barretenberg::fiel... (109 times, avg 8 ms) - 910 ms: barretenberg::group_elements::element<$>::mul_with_endomorphism(barr... (47 times, avg 19 ms) - 883 ms: std::array<$> proof_system::plonk::stdlib::element<$>::create_group_... (34 times, avg 25 ms) - 839 ms: proof_system::plonk::stdlib::bigfield<$>::conditional_negate(proof_s... (18 times, avg 46 ms) - 799 ms: proof_system::plonk::stdlib::element<$>::multiple_montgomery_ladder(... (15 times, avg 53 ms) - 798 ms: numeric::uintx::operator>>(unsigned long) const (107 times, avg 7 ms) - 792 ms: numeric::uintx::operator<<(unsigned long) const (107 times, avg 7 ms) - 776 ms: std::vector<$>::~vector() (486 times, avg 1 ms) - 776 ms: std::__cxx11::basic_string<$>::_M_mutate(unsigned long, unsigned lon... (190 times, avg 4 ms) - 745 ms: barretenberg::field<$> proof_system::plonk::compute_public_input_del... (77 times, avg 9 ms) - -**** Expensive headers: -247760 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp (included 32 times, avg 7742 ms), included via: - ultra_composer.cpp.o ultra_composer.hpp ultra_prover.hpp (13824 ms) - ultra_prover.cpp.o ultra_prover.hpp (12521 ms) - ultra_verifier.cpp.o ultra_verifier.hpp (12506 ms) - ultra_composer.test.cpp.o ultra_composer.hpp ultra_prover.hpp (12175 ms) - ultra_relation_consistency.test.cpp.o (10905 ms) - join_split.cpp.o join_split.hpp types.hpp ultra_composer.hpp ultra_prover.hpp (9947 ms) - ... - -195126 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.hpp (included 20 times, avg 9756 ms), included via: - ultra_composer.cpp.o (17380 ms) - ultra_composer.test.cpp.o (16168 ms) - join_split.cpp.o join_split.hpp types.hpp (13101 ms) - compute_nullifier.cpp.o compute_nullifier.hpp types.hpp (12366 ms) - compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp types.hpp (12056 ms) - join_split_tx.test.cpp.o join_split.hpp types.hpp (11866 ms) - ... - -177864 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/ecc/fields/field.hpp (included 253 times, avg 703 ms), included via: - serialize.test.cpp.o (2017 ms) - plookup.test.cpp.o byte_array.hpp bool.hpp witness.hpp fr.hpp (1275 ms) - schnorr.cpp.o schnorr.hpp bool.hpp witness.hpp fr.hpp (1215 ms) - c_bind.cpp.o io.hpp bn254.hpp fq.hpp (1204 ms) - sha256.cpp.o sha256.hpp byte_array.hpp bool.hpp witness.hpp fr.hpp (1172 ms) - wnaf.test.cpp.o fr.hpp (1171 ms) - ... - -173277 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp (included 35 times, avg 4950 ms), included via: - permutation_lib.test.cpp.o (9151 ms) - verifier.cpp.o verifier.hpp (8821 ms) - standard_composer.cpp.o standard_composer.hpp prover.hpp (8716 ms) - flavor.test.cpp.o (8535 ms) - prover.cpp.o prover.hpp (8508 ms) - relation_consistency.test.cpp.o (7685 ms) - ... - -163663 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/proof_system/prover.hpp (included 29 times, avg 5643 ms), included via: - standard_composer.cpp.o standard_composer.hpp (16258 ms) - prover.cpp.o (15441 ms) - standard_composer.test.cpp.o standard_composer.hpp (14003 ms) - relation_correctness.test.cpp.o standard_composer.hpp (13803 ms) - transcript.test.cpp.o standard_composer.hpp (13580 ms) - sumcheck.test.cpp.o standard_composer.hpp (12889 ms) - ... - -161314 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/join_split_example/types.hpp (included 14 times, avg 11522 ms), included via: - join_split.cpp.o join_split.hpp (13542 ms) - compute_nullifier.cpp.o compute_nullifier.hpp (12811 ms) - compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp (12507 ms) - join_split_tx.test.cpp.o join_split.hpp (12356 ms) - join_split.test.cpp.o (11920 ms) - value_note.test.cpp.o (11677 ms) - ... - -155946 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp (included 21 times, avg 7426 ms), included via: - ultra_composer.cpp.o ultra_composer.hpp (13946 ms) - ultra_prover.cpp.o (12597 ms) - ultra_composer.test.cpp.o ultra_composer.hpp (12302 ms) - join_split.cpp.o join_split.hpp types.hpp ultra_composer.hpp (10015 ms) - compute_nullifier.cpp.o compute_nullifier.hpp types.hpp ultra_composer.hpp (9229 ms) - compute_circuit_data.cpp.o compute_circuit_data.hpp compute_circuit_data.hpp join_split.hpp types.hpp ultra_composer.hpp (8838 ms) - ... - -155068 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp (included 146 times, avg 1062 ms), included via: - ultra_circuit_builder.cpp.o (3310 ms) - blake2s.test.cpp.o (2727 ms) - rom_table.test.cpp.o (1641 ms) - ram_table.test.cpp.o (1601 ms) - pedersen.cpp.o pedersen_gates.hpp byte_array.hpp safe_uint.hpp circuit_builders.hpp (1460 ms) - bool.cpp.o circuit_builders.hpp (1420 ms) - ... - -140205 ms: /mnt/user-data/cody/barretenberg/cpp/src/barretenberg/ecc/curves/bn254/fr.hpp (included 244 times, avg 574 ms), included via: - barycentric_data.test.cpp.o (2097 ms) - plookup.test.cpp.o byte_array.hpp bool.hpp witness.hpp (2069 ms) - polynomial_arithmetic.cpp.o polynomial_arithmetic.hpp evaluation_domain.hpp (2060 ms) - pedersen_plookup.cpp.o pedersen_plookup.hpp field.hpp witness.hpp (2031 ms) - packed_byte_array.cpp.o packed_byte_array.hpp bool.hpp witness.hpp (1987 ms) - inner_proof_data.cpp.o inner_proof_data.hpp (1986 ms) - ... - -132092 ms: /usr/include/c++/10/algorithm (included 292 times, avg 452 ms), included via: - hmac.test.cpp.o hmac.hpp serialize.hpp log.hpp (1294 ms) - c_bind.cpp.o c_bind.hpp serialize.hpp log.hpp (1133 ms) - io.test.cpp.o mem.hpp log.hpp (1131 ms) - c_bind.cpp.o c_bind.hpp serialize.hpp log.hpp (1113 ms) - ipa.test.cpp.o mem.hpp log.hpp (1095 ms) - external.bench.cpp.o benchmark.h (1079 ms) - ... - - done in 0.4s.