benchmarks/small_buffer_benchmark.cpp (42 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
//
// This source code is licensed under the MIT license found in the
// LICENSE.md file in the root directory of this source tree.
#include <dispenso/small_buffer_allocator.h>
#include "benchmark_common.h"
constexpr size_t kSmallSize = 32;
constexpr size_t kMediumSize = 128;
constexpr size_t kLargeSize = 256;
template <typename Alloc, typename Free>
void run(benchmark::State& state, Alloc alloc, Free dealloc) {
std::vector<char*> ptrs(state.range(0));
for (auto UNUSED_VAR : state) {
for (char*& p : ptrs) {
p = alloc();
}
for (char* p : ptrs) {
dealloc(p);
}
}
}
template <size_t kSize>
void BM_newdelete(benchmark::State& state) {
run(
state, []() { return new char[kSize]; }, [](char* buf) { delete[](buf); });
}
template <size_t kSize>
void BM_small_buffer_allocator(benchmark::State& state) {
run(
state,
[]() { return dispenso::allocSmallBuffer<kSize>(); },
[](char* buf) { dispenso::deallocSmallBuffer<kSize>(buf); });
}
BENCHMARK_TEMPLATE(BM_newdelete, kSmallSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kSmallSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_newdelete, kMediumSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kMediumSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_newdelete, kLargeSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kLargeSize)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_newdelete, kSmallSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kSmallSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_newdelete, kMediumSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kMediumSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_newdelete, kLargeSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_TEMPLATE(BM_small_buffer_allocator, kLargeSize)->Threads(16)->Range(1 << 13, 1 << 15);
BENCHMARK_MAIN();