Changeset View
Changeset View
Standalone View
Standalone View
src/bench/prevector.cpp
Show All 23 Lines | |||||
}; | }; | ||||
static_assert(!IS_TRIVIALLY_CONSTRUCTIBLE<nontrivial_t>::value, | static_assert(!IS_TRIVIALLY_CONSTRUCTIBLE<nontrivial_t>::value, | ||||
"expected nontrivial_t to not be trivially constructible"); | "expected nontrivial_t to not be trivially constructible"); | ||||
typedef uint8_t trivial_t; | typedef uint8_t trivial_t; | ||||
static_assert(IS_TRIVIALLY_CONSTRUCTIBLE<trivial_t>::value, | static_assert(IS_TRIVIALLY_CONSTRUCTIBLE<trivial_t>::value, | ||||
"expected trivial_t to be trivially constructible"); | "expected trivial_t to be trivially constructible"); | ||||
template <typename T> static void PrevectorDestructor(benchmark::State &state) { | template <typename T> static void PrevectorDestructor(benchmark::Bench &bench) { | ||||
while (state.KeepRunning()) { | bench.batch(2).run([&] { | ||||
for (auto x = 0; x < 1000; ++x) { | |||||
prevector<28, T> t0; | prevector<28, T> t0; | ||||
prevector<28, T> t1; | prevector<28, T> t1; | ||||
t0.resize(28); | t0.resize(28); | ||||
t1.resize(29); | t1.resize(29); | ||||
} | }); | ||||
} | |||||
} | } | ||||
template <typename T> static void PrevectorClear(benchmark::State &state) { | template <typename T> static void PrevectorClear(benchmark::Bench &bench) { | ||||
while (state.KeepRunning()) { | |||||
for (auto x = 0; x < 1000; ++x) { | |||||
prevector<28, T> t0; | prevector<28, T> t0; | ||||
prevector<28, T> t1; | prevector<28, T> t1; | ||||
bench.batch(2).run([&] { | |||||
t0.resize(28); | t0.resize(28); | ||||
t0.clear(); | t0.clear(); | ||||
t1.resize(29); | t1.resize(29); | ||||
t1.clear(); | t1.clear(); | ||||
} | }); | ||||
} | |||||
} | } | ||||
template <typename T> static void PrevectorResize(benchmark::State &state) { | template <typename T> static void PrevectorResize(benchmark::Bench &bench) { | ||||
while (state.KeepRunning()) { | |||||
prevector<28, T> t0; | prevector<28, T> t0; | ||||
prevector<28, T> t1; | prevector<28, T> t1; | ||||
for (auto x = 0; x < 1000; ++x) { | bench.batch(4).run([&] { | ||||
t0.resize(28); | t0.resize(28); | ||||
t0.resize(0); | t0.resize(0); | ||||
t1.resize(29); | t1.resize(29); | ||||
t1.resize(0); | t1.resize(0); | ||||
} | }); | ||||
} | |||||
} | } | ||||
template <typename T> | template <typename T> | ||||
static void PrevectorDeserialize(benchmark::State &state) { | static void PrevectorDeserialize(benchmark::Bench &bench) { | ||||
CDataStream s0(SER_NETWORK, 0); | CDataStream s0(SER_NETWORK, 0); | ||||
prevector<28, T> t0; | prevector<28, T> t0; | ||||
t0.resize(28); | t0.resize(28); | ||||
for (auto x = 0; x < 900; ++x) { | for (auto x = 0; x < 900; ++x) { | ||||
s0 << t0; | s0 << t0; | ||||
} | } | ||||
t0.resize(100); | t0.resize(100); | ||||
for (auto x = 0; x < 101; ++x) { | for (auto x = 0; x < 101; ++x) { | ||||
s0 << t0; | s0 << t0; | ||||
} | } | ||||
while (state.KeepRunning()) { | bench.batch(1000).run([&] { | ||||
prevector<28, T> t1; | prevector<28, T> t1; | ||||
for (auto x = 0; x < 1000; ++x) { | for (auto x = 0; x < 1000; ++x) { | ||||
s0 >> t1; | s0 >> t1; | ||||
} | } | ||||
s0.Init(SER_NETWORK, 0); | s0.Init(SER_NETWORK, 0); | ||||
} | }); | ||||
} | } | ||||
#define PREVECTOR_TEST(name, nontrivops, trivops) \ | #define PREVECTOR_TEST(name) \ | ||||
static void Prevector##name##Nontrivial(benchmark::State &state) { \ | static void Prevector##name##Nontrivial(benchmark::Bench &bench) { \ | ||||
Prevector##name<nontrivial_t>(state); \ | Prevector##name<nontrivial_t>(bench); \ | ||||
} \ | } \ | ||||
BENCHMARK(Prevector##name##Nontrivial, nontrivops); \ | BENCHMARK(Prevector##name##Nontrivial); \ | ||||
static void Prevector##name##Trivial(benchmark::State &state) { \ | static void Prevector##name##Trivial(benchmark::Bench &bench) { \ | ||||
Prevector##name<trivial_t>(state); \ | Prevector##name<trivial_t>(bench); \ | ||||
} \ | } \ | ||||
BENCHMARK(Prevector##name##Trivial, trivops); | BENCHMARK(Prevector##name##Trivial); | ||||
PREVECTOR_TEST(Clear, 28300, 88600) | PREVECTOR_TEST(Clear) | ||||
PREVECTOR_TEST(Destructor, 28800, 88900) | PREVECTOR_TEST(Destructor) | ||||
PREVECTOR_TEST(Resize, 28900, 90300) | PREVECTOR_TEST(Resize) | ||||
PREVECTOR_TEST(Deserialize, 6800, 52000) | PREVECTOR_TEST(Deserialize) |