Page MenuHomec4science

main_benchmark.cpp
No OneTemporary

File Metadata

Created
Tue, Jul 22, 11:52

main_benchmark.cpp

/* -------------------------------------------------------------------------- */
#include "mm_eigen.hh"
#include "mm_hand.hh"
#include "mm_ugly.hh"
/* -------------------------------------------------------------------------- */
#include <benchmark/benchmark.h>
#include <random>
#include <vector>
class MyFixture : public benchmark::Fixture {
public:
void SetUp(const ::benchmark::State & state) {
As.resize(n * n);
Bs.resize(n * n);
Cs.resize(n * n);
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0.0, 10.0);
for (auto && a : As) {
a = dis(gen);
}
for (auto && b : Bs) {
b = dis(gen);
}
}
void TearDown(const ::benchmark::State & state) {}
std::vector<double> As;
std::vector<double> Bs;
std::vector<double> Cs;
const int n{2 << 10};
};
BENCHMARK_DEFINE_F(MyFixture, dsqmm_ugly)(benchmark::State & st) {
auto n = st.range(0);
for (auto _ : st) {
dsqmm1(As.data(), Bs.data(), Cs.data(), n);
}
st.SetBytesProcessed(3 * n * n * sizeof(double));
st.SetComplexityN(n);
}
BENCHMARK_DEFINE_F(MyFixture, dsqmm_format)(benchmark::State & st) {
auto n = st.range(0);
for (auto _ : st) {
dsqmm2(As.data(), Bs.data(), Cs.data(), n);
}
st.SetBytesProcessed(3 * n * n * sizeof(double));
st.SetComplexityN(n);
}
BENCHMARK_DEFINE_F(MyFixture, dsqmm_eigen)(benchmark::State & st) {
auto n = st.range(0);
for (auto _ : st) {
dsqmm3(As.data(), Bs.data(), Cs.data(), n);
}
st.SetBytesProcessed(3 * n * n * sizeof(double));
st.SetComplexityN(n);
}
BENCHMARK_REGISTER_F(MyFixture, dsqmm_ugly)->Range(3, 2 << 6)->Complexity();
BENCHMARK_REGISTER_F(MyFixture, dsqmm_format)->Range(3, 2 << 6)->Complexity();
BENCHMARK_REGISTER_F(MyFixture, dsqmm_eigen)->Range(3, 2 << 6)->Complexity();
BENCHMARK_MAIN();

Event Timeline