Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Fixing external benchmarks memory problems #639

Closed
wants to merge 4 commits into from
Closed
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 @@ -35,14 +35,15 @@ void generate_test_sha256_plonk_circuit(Builder& builder, size_t num_iterations)
for (size_t i = 0; i < 32; ++i) {
in[i] = 0;
}

proof_system::plonk::stdlib::packed_byte_array<Builder> input(&builder, in);
for (size_t i = 0; i < num_iterations; i++) {
input = proof_system::plonk::stdlib::sha256<Builder>(input);
}
}

Builder external_builders[NUM_PROOFS];
Composer external_composers[NUM_PROOFS];
void* external_builders[NUM_PROOFS];
void* external_composers[NUM_PROOFS];
Prover external_provers[NUM_PROOFS];
Verifier external_verifiers[NUM_PROOFS];
plonk::proof external_proofs[NUM_PROOFS];
Expand All @@ -55,15 +56,15 @@ plonk::proof external_proofs[NUM_PROOFS];
void generate_sha256_proof_bench(State& state) noexcept
{
for (auto _ : state) {

size_t idx = static_cast<size_t>(state.range(0));
size_t num_iterations = 1;
for (size_t i = 0; i < idx; i++) {
num_iterations *= PROOF_COUNT_LOG;
}
external_composers[idx] = Composer();
generate_test_sha256_plonk_circuit(external_builders[idx], num_iterations);
external_provers[idx] = external_composers[idx].create_prover(external_builders[idx]);
external_composers[idx] = (void*)new Composer();
external_builders[idx] = (void*)new Builder();
generate_test_sha256_plonk_circuit(*(Builder*)external_builders[idx], num_iterations);
external_provers[idx] = ((Composer*)external_composers[idx])->create_prover(*(Builder*)external_builders[idx]);
external_proofs[idx] = external_provers[idx].construct_proof();
// info("Proof Size for SHA256 hash count ", num_iterations, ": ", external_proofs[idx].proof_data.size());
}
Expand All @@ -85,7 +86,7 @@ static void generate_sha256_verifier(const State& state)
{

size_t idx = static_cast<size_t>(state.range(0));
external_verifiers[idx] = external_composers[idx].create_verifier(external_builders[idx]);
external_verifiers[idx] = ((Composer*)external_composers[idx])->create_verifier(*(Builder*)external_builders[idx]);
}
/**
* @brief Benchmark sha256 verification
Expand Down Expand Up @@ -136,9 +137,9 @@ void generate_blake3s_proof_bench(State& state) noexcept
for (size_t i = 0; i < idx; i++) {
num_iterations *= PROOF_COUNT_LOG;
}
external_composers[idx] = Composer();
generate_test_blake3s_plonk_circuit(external_builders[idx], num_iterations);
external_provers[idx] = external_composers[idx].create_prover(external_builders[idx]);
external_composers[idx] = new Composer();
generate_test_blake3s_plonk_circuit(*(Builder*)external_builders[idx], num_iterations);
external_provers[idx] = ((Composer*)external_composers[idx])->create_prover(*(Builder*)external_builders[idx]);
external_proofs[idx] = external_provers[idx].construct_proof();
// Proof size with no public inputs is always 2144
// info("Proof Size for Blake3s hash count ", num_iterations, ": ", external_proofs[idx].proof_data.size());
Expand All @@ -158,7 +159,7 @@ static void generate_blake3s_verifier(const State& state)
{

size_t idx = static_cast<size_t>(state.range(0));
external_verifiers[idx] = external_composers[idx].create_verifier(external_builders[idx]);
external_verifiers[idx] = ((Composer*)external_composers[idx])->create_verifier(*(Builder*)external_builders[idx]);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ void generate_test_plonk_circuit(Builder& builder, size_t num_bytes)
proof_system::plonk::stdlib::sha256<Builder>(input);
}

Builder builders[NUM_HASHES];
Composer composers[NUM_HASHES];
void* builders[NUM_HASHES];
void* composers[NUM_HASHES];
Prover provers[NUM_HASHES];
Verifier verifiers[NUM_HASHES];
plonk::proof proofs[NUM_HASHES];
Expand All @@ -40,8 +40,8 @@ void construct_witnesses_bench(State& state) noexcept
{
for (auto _ : state) {
size_t idx = (static_cast<size_t>((state.range(0))) - START_BYTES) / BYTES_PER_CHUNK;
builders[idx] = Builder();
generate_test_plonk_circuit(builders[idx], static_cast<size_t>(state.range(0)));
builders[idx] = (void*)new Builder();
generate_test_plonk_circuit(*(Builder*)builders[idx], static_cast<size_t>(state.range(0)));
}
}
BENCHMARK(construct_witnesses_bench)->DenseRange(START_BYTES, MAX_BYTES, BYTES_PER_CHUNK);
Expand All @@ -50,8 +50,8 @@ void preprocess_witnesses_bench(State& state) noexcept
{
for (auto _ : state) {
size_t idx = (static_cast<size_t>((state.range(0))) - START_BYTES) / BYTES_PER_CHUNK;
composers[idx] = Composer();
provers[idx] = composers[idx].create_prover(builders[idx]);
composers[idx] = (void*)new Composer();
provers[idx] = ((Composer*)composers[idx])->create_prover(*(Builder*)builders[idx]);
std::cout << "prover subgroup size = " << provers[idx].key->small_domain.size << std::endl;
// printf("num bytes = %" PRIx64 ", num gates = %zu\n", state.range(0), composers[idx].get_num_gates());
}
Expand All @@ -62,7 +62,7 @@ void construct_instances_bench(State& state) noexcept
{
for (auto _ : state) {
size_t idx = (static_cast<size_t>((state.range(0))) - START_BYTES) / BYTES_PER_CHUNK;
verifiers[idx] = composers[idx].create_verifier(builders[idx]);
verifiers[idx] = ((Composer*)composers[idx])->create_verifier(*(Builder*)builders[idx]);
}
}
BENCHMARK(construct_instances_bench)->DenseRange(START_BYTES, MAX_BYTES, BYTES_PER_CHUNK);
Expand Down