Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ template <typename Builder> void generate_basic_arithmetic_circuit(Builder& buil
// Ensure the circuit is filled but finalisation doesn't make the circuit size go to the next power of two
size_t target_gate_count = (1UL << log2_num_gates);
const size_t GATE_COUNT_BUFFER = 1000; // Since we're using an estimate, let's add an error term in case.
size_t passes = (target_gate_count - builder.get_estimated_num_finalized_gates() - GATE_COUNT_BUFFER) / 4;
size_t passes = (target_gate_count - builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false) -
GATE_COUNT_BUFFER) /
4;
if (static_cast<int>(passes) <= 0) {
throw_or_abort("We don't support low values of log2_num_gates.");
}
Expand All @@ -38,7 +40,7 @@ template <typename Builder> void generate_basic_arithmetic_circuit(Builder& buil
b = c * c;
}

size_t est_gate_count = builder.get_estimated_num_finalized_gates();
size_t est_gate_count = builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false);
BB_ASSERT_LTE(est_gate_count,
(1UL << log2_num_gates) - GATE_COUNT_BUFFER,
"Check that the finalized gate count won't exceed the desired gate count.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ template <typename RecursiveFlavor> class BoomerangRecursiveVerifierTest : publi
output.ipa_claim.set_public();
outer_circuit.ipa_proof = output.ipa_proof.get_value();
}
info("Recursive Verifier: num gates = ", outer_circuit.get_estimated_num_finalized_gates());
info("Recursive Verifier: num gates = ", outer_circuit.get_num_finalized_gates_inefficient());

// Check for a failure flag in the recursive verifier circuit
EXPECT_EQ(outer_circuit.failed(), false) << outer_circuit.err();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ TEST(UltraCircuitBuilder, CopyConstructor)

UltraCircuitBuilder duplicate_builder{ builder };

EXPECT_EQ(duplicate_builder.get_estimated_num_finalized_gates(), builder.get_estimated_num_finalized_gates());
EXPECT_EQ(duplicate_builder.get_num_finalized_gates_inefficient(), builder.get_num_finalized_gates_inefficient());
EXPECT_TRUE(CircuitChecker::check(duplicate_builder));
}

Expand Down Expand Up @@ -935,7 +935,7 @@ TEST(UltraCircuitBuilder, Ram)
// Test the builder copy constructor for a circuit with RAM gates
UltraCircuitBuilder duplicate_builder{ builder };

EXPECT_EQ(duplicate_builder.get_estimated_num_finalized_gates(), builder.get_estimated_num_finalized_gates());
EXPECT_EQ(duplicate_builder.get_num_finalized_gates_inefficient(), builder.get_num_finalized_gates_inefficient());
EXPECT_TRUE(CircuitChecker::check(duplicate_builder));
}

Expand Down
5 changes: 3 additions & 2 deletions barretenberg/cpp/src/barretenberg/common/log.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@
#define BENCHMARK_INFO_SEPARATOR "#"
#define BENCHMARK_INFO_SUFFIX "##BENCHMARK_INFO_SUFFIX##"

#define BENCH_GATE_COUNT_START(builder, op_name) uint64_t __bench_before = builder.get_estimated_num_finalized_gates();
#define BENCH_GATE_COUNT_START(builder, op_name) \
uint64_t __bench_before = builder.get_num_finalized_gates_inefficient();

#define BENCH_GATE_COUNT_END(builder, op_name) \
uint64_t __bench_after = builder.get_estimated_num_finalized_gates(); \
uint64_t __bench_after = builder.get_num_finalized_gates_inefficient(); \
std::cerr << "num gates with " << op_name << " = " << __bench_after - __bench_before << std::endl; \
benchmark_info(Builder::NAME_STRING, "Bigfield", op_name, "Gate Count", __bench_after - __bench_before);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ template <typename Builder> class GateCounter {
if (!collect_gates_per_opcode) {
return 0;
}
size_t new_gate_count = builder->get_estimated_num_finalized_gates();
size_t new_gate_count = builder->get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false);
size_t diff = new_gate_count - prev_gate_count;
prev_gate_count = new_gate_count;
return diff;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class AcirIntegrationTest : public ::testing::Test {
Prover prover{ prover_instance, verification_key };
#ifdef LOG_SIZES
builder.blocks.summarize();
info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());
info("total circuit size = ", builder.get_estimated_total_circuit_size());
info("circuit size = ", prover.prover_instance->dyadic_size());
info("log circuit size = ", prover.prover_instance->log_dyadic_size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,6 @@ class ChonkRecursionConstraintTest : public ::testing::Test {
// Build constraints
Builder builder = create_circuit(program, { .has_ipa_claim = true });

info("Estimate finalized number of gates: ", builder.get_estimated_num_finalized_gates());
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general I don't think tests should be printing anything so I started deleting these then realized they're ubiquitous and relented.


// Construct vk
auto prover_instance = std::make_shared<ProverInstance>(builder);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ TYPED_TEST(AcirHonkRecursionConstraint, TestBasicSingleHonkRecursionConstraint)
/*dummy_witnesses=*/false,
/*predicate_val=*/true);

info("estimate finalized circuit gates = ", layer_2_circuit.get_estimated_num_finalized_gates());
info("estimate finalized circuit gates = ", layer_2_circuit.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<typename TestFixture::OuterProverInstance>(layer_2_circuit);
auto verification_key =
Expand All @@ -298,7 +298,7 @@ TYPED_TEST(AcirHonkRecursionConstraint, TestBasicDoubleHonkRecursionConstraints)
auto layer_2_circuit =
TestFixture::template create_outer_circuit<typename TestFixture::OuterBuilder>(layer_1_circuits, false, false);

info("circuit gates = ", layer_2_circuit.get_estimated_num_finalized_gates());
info("circuit gates = ", layer_2_circuit.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<typename TestFixture::OuterProverInstance>(layer_2_circuit);
auto verification_key =
Expand Down Expand Up @@ -364,7 +364,7 @@ TYPED_TEST(AcirHonkRecursionConstraint, TestOneOuterRecursiveCircuit)
/*dummy_witnesses=*/false,
/*predicate_val=*/true);
info("created second outer circuit");
info("number of gates in layer 3 = ", layer_3_circuit.get_estimated_num_finalized_gates());
info("number of gates in layer 3 = ", layer_3_circuit.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<typename TestFixture::OuterProverInstance>(layer_3_circuit);
auto verification_key =
Expand Down Expand Up @@ -421,7 +421,7 @@ TYPED_TEST(AcirHonkRecursionConstraint, TestFullRecursiveComposition)
/*dummy_witnesses=*/false,
/*predicate_val=*/true);
info("created third outer circuit");
info("number of gates in layer 3 circuit = ", layer_3_circuit.get_estimated_num_finalized_gates());
info("number of gates in layer 3 circuit = ", layer_3_circuit.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<typename TestFixture::OuterProverInstance>(layer_3_circuit);
auto verification_key =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ template <TestBase Base> class TestClass {
{
AcirProgram program{ constraint_system, witness_values };
auto builder = create_circuit<Builder>(program);
info("Num gates: ", builder.get_estimated_num_finalized_gates());
info("Num gates: ", builder.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<ProverInstance>(builder);
vk_from_witness = std::make_shared<VerificationKey>(prover_instance->get_precomputed());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ template <TestBaseWithPredicate Base> class TestClassWithPredicate {
{
AcirProgram program{ constraint_system, witness_values };
auto builder = create_circuit<Builder>(program);
info("Num gates: ", builder.get_estimated_num_finalized_gates());
info("Num gates: ", builder.get_num_finalized_gates_inefficient());

auto prover_instance = std::make_shared<ProverInstance>(builder);
vk_from_witness = std::make_shared<VerificationKey>(prover_instance->get_precomputed());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ TEST(UltraCircuitSMT, ArithmeticRelation)
auto circuit_info = unpack_from_buffer(builder.export_circuit());
Solver s(circuit_info.modulus, ultra_solver_config);
UltraCircuit cir(circuit_info, &s);
ASSERT_EQ(cir.get_num_gates(), builder.get_estimated_num_finalized_gates());
ASSERT_EQ(cir.get_num_gates(), builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false));

cir["a"] == a.get_value();
cir["b"] == b.get_value();
Expand Down Expand Up @@ -122,7 +122,7 @@ TEST(UltraCircuitSMT, EllipticRelationADD)
auto circuit_info = unpack_from_buffer(builder.export_circuit());
Solver s(circuit_info.modulus, ultra_solver_config);
UltraCircuit cir(circuit_info, &s);
ASSERT_EQ(cir.get_num_gates(), builder.get_estimated_num_finalized_gates());
ASSERT_EQ(cir.get_num_gates(), builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false));

cir["x1"] == p1.x().get_value();
cir["x2"] == p2.x().get_value();
Expand Down Expand Up @@ -165,7 +165,7 @@ TEST(UltraCircuitSMT, EllipticRelationDBL)
auto circuit_info = unpack_from_buffer(builder.export_circuit());
Solver s(circuit_info.modulus, ultra_solver_config);
UltraCircuit cir(circuit_info, &s);
ASSERT_EQ(cir.get_num_gates(), builder.get_estimated_num_finalized_gates());
ASSERT_EQ(cir.get_num_gates(), builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false));

cir["x1"] == p1.x().get_value();
cir["y1"] == p1.y().get_value();
Expand Down Expand Up @@ -202,7 +202,7 @@ TEST(UltraCircuitSMT, OptimizedDeltaRangeRelation)
auto circuit_info = unpack_from_buffer(builder.export_circuit());
Solver s(circuit_info.modulus, ultra_solver_config);
UltraCircuit cir(circuit_info, &s, TermType::BVTerm);
ASSERT_EQ(cir.get_num_gates(), builder.get_estimated_num_finalized_gates());
ASSERT_EQ(cir.get_num_gates(), builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false));

cir["a"] == a.get_value();
s.print_assertions();
Expand Down Expand Up @@ -251,7 +251,7 @@ TEST(UltraCircuitSMT, LookupRelation2)
auto circuit_info = unpack_from_buffer(builder.export_circuit());
Solver s(circuit_info.modulus, ultra_solver_config, /*base=*/16, /*bvsize=*/256);
UltraCircuit cir(circuit_info, &s, TermType::BVTerm);
ASSERT_EQ(cir.get_num_gates(), builder.get_estimated_num_finalized_gates());
ASSERT_EQ(cir.get_num_gates(), builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false));

cir["a"] == a.get_value();
cir["b"] == b.get_value();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class ECCVMRecursiveTests : public ::testing::Test {
auto [opening_claim, ipa_transcript] = verifier.verify_proof(proof);
stdlib::recursion::honk::DefaultIO<OuterBuilder>::add_default(outer_circuit);

info("Recursive Verifier: num gates = ", outer_circuit.get_estimated_num_finalized_gates());
info("Recursive Verifier: num gates = ", outer_circuit.get_num_finalized_gates_inefficient());

// Check for a failure flag in the recursive verifier circuit
EXPECT_EQ(outer_circuit.failed(), false) << outer_circuit.err();
Expand Down Expand Up @@ -162,7 +162,8 @@ class ECCVMRecursiveTests : public ::testing::Test {
RecursiveVerifier verifier{ &outer_circuit, verification_key, stdlib_verifier_transcript };
[[maybe_unused]] auto output = verifier.verify_proof(proof);
stdlib::recursion::honk::DefaultIO<OuterBuilder>::add_default(outer_circuit);
info("Recursive Verifier: estimated num finalized gates = ", outer_circuit.get_estimated_num_finalized_gates());
info("Recursive Verifier: estimated num finalized gates = ",
outer_circuit.get_num_finalized_gates_inefficient());

// Check for a failure flag in the recursive verifier circuit
EXPECT_FALSE(CircuitChecker::check(outer_circuit));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ TEST(stdlib_aes128, encrypt_64_bytes_original)
EXPECT_EQ(result[i].get_value(), expected[i]);
}

std::cout << "num gates = " << builder.get_estimated_num_finalized_gates() << std::endl;
std::cout << "num gates = " << builder.get_num_finalized_gates_inefficient() << std::endl;

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ template <class Curve> class EcdsaTests : public ::testing::Test {
EXPECT_EQ(signature_result.get_value(), signature_verification_result);

// Log data
size_t finalized_num_gates = builder.get_estimated_num_finalized_gates();
size_t finalized_num_gates = builder.get_num_finalized_gates_inefficient();
info("num gates = ", finalized_num_gates);
benchmark_info(Builder::NAME_STRING, "ECDSA", "Signature Verification Test", "Gate Count", finalized_num_gates);

Expand Down Expand Up @@ -371,8 +371,8 @@ TYPED_TEST(EcdsaTests, VerifySignature)

size_t finalized_num_gates =
TestFixture::test_verify_signature(/*random_signature=*/false, TestFixture::TamperingMode::None);
static constexpr size_t NUM_GATES_SECP256K1 = 41827;
static constexpr size_t NUM_GATES_SECP256R1 = IsMegaBuilder<typename Curve::Builder> ? 71534 : 71532;
static constexpr size_t NUM_GATES_SECP256K1 = 41581;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is likely due to the fact that the old "estimation" method did not account for the de-duplication of NNF arithmetic gates (used in conjunction with biggroup operations) during finalization

static constexpr size_t NUM_GATES_SECP256R1 = IsMegaBuilder<typename Curve::Builder> ? 70994 : 70992;
BB_ASSERT_EQ(finalized_num_gates,
Curve::type == bb::CurveType::SECP256K1 ? NUM_GATES_SECP256K1 : NUM_GATES_SECP256R1,
"There has been a change in the number of gates for ECDSA verification");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ TEST(stdlib_schnorr, schnorr_verify_signature)
byte_array_ct message(&builder, message_string);
schnorr_verify_signature(message, pub_key, sig);

info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());
bool result = CircuitChecker::check(builder);
EXPECT_EQ(result, true);
}
Expand Down Expand Up @@ -92,7 +92,7 @@ TEST(stdlib_schnorr, verify_signature_failure)
byte_array_ct message(&builder, message_string);
schnorr_verify_signature(message, pub_key2_ct, sig);

info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());

bool verification_result = CircuitChecker::check(builder);
EXPECT_EQ(verification_result, false);
Expand Down Expand Up @@ -128,7 +128,7 @@ TEST(stdlib_schnorr, schnorr_signature_verification_result)
bool_ct signature_result = schnorr_signature_verification_result(message, pub_key, sig);
EXPECT_EQ(signature_result.get_value(), true);

info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());

bool result = CircuitChecker::check(builder);
EXPECT_EQ(result, true);
Expand Down Expand Up @@ -172,7 +172,7 @@ TEST(stdlib_schnorr, signature_verification_result_failure)
bool_ct signature_result = schnorr_signature_verification_result(message, pub_key2_ct, sig);
EXPECT_EQ(signature_result.get_value(), false);

info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());

bool verification_result = CircuitChecker::check(builder);
EXPECT_EQ(verification_result, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ TEST(stdlib_blake2s, test_single_block_plookup)

EXPECT_EQ(output.get_value(), std::vector<uint8_t>(expected.begin(), expected.end()));

info("builder gates = ", builder.get_estimated_num_finalized_gates());
info("builder gates = ", builder.get_num_finalized_gates_inefficient());

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
Expand All @@ -46,7 +46,7 @@ TEST(stdlib_blake2s, test_double_block_plookup)

EXPECT_EQ(output.get_value(), std::vector<uint8_t>(expected.begin(), expected.end()));

info("builder gates = ", builder.get_estimated_num_finalized_gates());
info("builder gates = ", builder.get_num_finalized_gates_inefficient());

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ TEST(stdlib_blake3s, test_single_block_plookup)

EXPECT_EQ(output.get_value(), expected);

info("builder gates = ", builder.get_estimated_num_finalized_gates());
info("builder gates = ", builder.get_num_finalized_gates_inefficient());

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
Expand All @@ -43,7 +43,7 @@ TEST(stdlib_blake3s, test_double_block_plookup)

EXPECT_EQ(output.get_value(), expected);

info("builder gates = ", builder.get_estimated_num_finalized_gates());
info("builder gates = ", builder.get_num_finalized_gates_inefficient());

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ TEST(stdlib_keccak, keccak_rho_output_table)
EXPECT_EQ(static_cast<uint256_t>(result_msb.get_value()), expected_msb);
});

info("num gates = ", builder.get_estimated_num_finalized_gates());
info("num gates = ", builder.get_num_finalized_gates_inefficient());
bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Expand Down Expand Up @@ -131,7 +131,7 @@ TEST(stdlib_keccak, keccak_chi_output_table)
EXPECT_EQ(static_cast<uint256_t>(normalized.get_value()), normalized_native);
EXPECT_EQ(static_cast<uint256_t>(msb.get_value()), binary_native >> 63);
}
info("num gates = n", builder.get_estimated_num_finalized_gates());
info("num gates = n", builder.get_num_finalized_gates_inefficient());
bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Expand Down Expand Up @@ -189,8 +189,6 @@ TEST(stdlib_keccak, test_single_block)

EXPECT_EQ(output.get_value(), expected);

builder.print_num_estimated_finalized_gates();

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Expand All @@ -214,8 +212,6 @@ TEST(stdlib_keccak, test_double_block)

EXPECT_EQ(output.get_value(), expected);

builder.print_num_estimated_finalized_gates();

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Expand All @@ -233,8 +229,6 @@ TEST(stdlib_keccak, test_permutation_opcode_single_block)

EXPECT_EQ(output.get_value(), expected);

builder.print_num_estimated_finalized_gates();

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Expand All @@ -255,8 +249,6 @@ TEST(stdlib_keccak, test_permutation_opcode_double_block)

EXPECT_EQ(output.get_value(), expected);

builder.print_num_estimated_finalized_gates();

bool proof_result = CircuitChecker::check(builder);
EXPECT_EQ(proof_result, true);
}
Loading
Loading