Skip to content

Commit

Permalink
refactor benchmarks, move them to their own directory
Browse files Browse the repository at this point in the history
Signed-off-by: Anjan Roy <[email protected]>
  • Loading branch information
itzmeanjan committed Apr 12, 2024
1 parent 34d9f1a commit b252dd3
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 80 deletions.
15 changes: 0 additions & 15 deletions bench/main.cpp

This file was deleted.

10 changes: 10 additions & 0 deletions benchmarks/bench_helper.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once
#include <algorithm>
#include <vector>

const auto compute_min = [](const std::vector<double>& v) -> double {
return *std::min_element(v.begin(), v.end());
};
const auto compute_max = [](const std::vector<double>& v) -> double {
return *std::max_element(v.begin(), v.end());
};
17 changes: 10 additions & 7 deletions include/bench/bench_keygen.hpp → benchmarks/bench_keygen.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
#pragma once
#include "bench_helper.hpp"
#include "falcon.hpp"
#include <benchmark/benchmark.h>

// Benchmark Falcon PQC suite implementation
namespace bench_falcon {

// Benchmark Falcon{512, 1024} keypair generation algorithm.
//
// Note, this keygen API neither builds matrix B nor Falcon tree T, which are
// required for Falcon message signing.
template<const size_t N>
void
keygen(benchmark::State& state)
static void
falcon_keygen(benchmark::State& state)
requires((N == 512) || (N == 1024))
{
constexpr size_t pklen = falcon_utils::compute_pkey_len<N>();
Expand All @@ -34,4 +31,10 @@ keygen(benchmark::State& state)
std::free(skey);
}

}
BENCHMARK(falcon_keygen<512>)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);

BENCHMARK(falcon_keygen<1024>)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);
35 changes: 23 additions & 12 deletions include/bench/bench_signing.hpp → benchmarks/bench_signing.cpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
#pragma once
#include "bench_helper.hpp"
#include "falcon.hpp"
#include "prng.hpp"
#include <benchmark/benchmark.h>
#include <cassert>

// Benchmark Falcon PQC suite implementation
namespace bench_falcon {

// Benchmark Falcon{512, 1024} message signing algorithm, emulating only single
// message is signed with secret key.
//
// Note, this signing API builds matrix B and falcon tree T, everytime it's
// asked to sign a message, by decoding Falcon secret key.
template<const size_t N>
void
sign_single(benchmark::State& state)
falcon_sign_single(benchmark::State& state)
requires((N == 512) || (N == 1024))
{
const size_t mlen = state.range();
Expand All @@ -32,15 +29,13 @@ sign_single(benchmark::State& state)
falcon::keygen<N>(pkey, skey);
rng.read(msg, mlen);

bool _signed = true;
for (auto _ : state) {
const bool _signed = falcon::sign<N>(skey, msg, mlen, sig);
_signed &= falcon::sign<N>(skey, msg, mlen, sig);

benchmark::DoNotOptimize(_signed);
assert(_signed);

benchmark::DoNotOptimize(skey);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(mlen);
benchmark::DoNotOptimize(sig);
benchmark::ClobberMemory();
}
Expand All @@ -54,6 +49,7 @@ sign_single(benchmark::State& state)
std::free(sig);
std::free(msg);

assert(_signed);
assert(verified);
}

Expand All @@ -66,7 +62,7 @@ sign_single(benchmark::State& state)
// result.
template<const size_t N>
void
sign_many(benchmark::State& state)
falcon_sign_many(benchmark::State& state)
requires((N == 512) || (N == 1024))
{
const size_t mlen = state.range();
Expand Down Expand Up @@ -99,7 +95,6 @@ sign_many(benchmark::State& state)
benchmark::DoNotOptimize(B);
benchmark::DoNotOptimize(T);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(mlen);
benchmark::DoNotOptimize(sig);
benchmark::DoNotOptimize(rng);
benchmark::ClobberMemory();
Expand All @@ -118,4 +113,20 @@ sign_many(benchmark::State& state)
assert(verified);
}

}
BENCHMARK(falcon_sign_single<512>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);
BENCHMARK(falcon_sign_many<512>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);

BENCHMARK(falcon_sign_single<1024>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);
BENCHMARK(falcon_sign_many<1024>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);
26 changes: 16 additions & 10 deletions include/bench/bench_verify.hpp → benchmarks/bench_verify.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
#pragma once
#include "bench_helper.hpp"
#include "falcon.hpp"
#include "prng.hpp"
#include <benchmark/benchmark.h>
#include <cassert>

// Benchmark Falcon PQC suite implementation
namespace bench_falcon {

// Benchmark Falcon{512, 1024} signature verification algorithm.
//
// Note, this verification API decodes public key everytime signature
// verification is requested.
template<const size_t N>
void
verify(benchmark::State& state)
falcon_verify(benchmark::State& state)
requires((N == 512) || (N == 1024))
{
const size_t mlen = state.range();
Expand All @@ -30,18 +27,17 @@ verify(benchmark::State& state)

falcon::keygen<N>(pkey, skey);
rng.read(msg, mlen);

const bool _signed = falcon::sign<N>(skey, msg, mlen, sig);
assert(_signed);

bool verified = true;
for (auto _ : state) {
const bool verified = falcon::verify<N>(pkey, msg, mlen, sig);
verified &= falcon::verify<N>(pkey, msg, mlen, sig);

benchmark::DoNotOptimize(verified);
assert(verified);

benchmark::DoNotOptimize(pkey);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(mlen);
benchmark::DoNotOptimize(sig);
benchmark::ClobberMemory();
}
Expand All @@ -52,6 +48,16 @@ verify(benchmark::State& state)
std::free(skey);
std::free(sig);
std::free(msg);
}

assert(verified);
}

BENCHMARK(falcon_verify<512>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);

BENCHMARK(falcon_verify<1024>)
->Arg(32)
->ComputeStatistics("min", compute_min)
->ComputeStatistics("max", compute_max);
5 changes: 0 additions & 5 deletions include/bench/bench_falcon.hpp

This file was deleted.

31 changes: 0 additions & 31 deletions include/bench/bench_samplerz.hpp

This file was deleted.

0 comments on commit b252dd3

Please sign in to comment.