14#include <benchmark/benchmark.h>
19static void BM_TableBuilderOverhead(benchmark::State& state)
23 for (
auto _ :
state) {
25 [[maybe_unused]]
auto rowWriter = builder.
persist<
float,
float,
float>({
"x",
"y",
"z"});
32static void BM_TableBuilderScalar(benchmark::State& state)
35 for (
auto _ :
state) {
37 auto rowWriter = builder.
persist<
float>({
"x"});
38 for (
auto i = 0;
i <
state.range(0); ++
i) {
46BENCHMARK(BM_TableBuilderScalar)->Range(8, 8 << 16);
48static void BM_TableBuilderScalarReserved(benchmark::State& state)
51 for (
auto _ :
state) {
53 auto rowWriter = builder.
persist<
float>({
"x"});
55 for (
auto i = 0;
i <
state.range(0); ++
i) {
62BENCHMARK(BM_TableBuilderScalarReserved)->Arg(1 << 21);
63BENCHMARK(BM_TableBuilderScalarReserved)->Range(8, 8 << 16);
65static void BM_TableBuilderScalarPresized(benchmark::State& state)
68 for (
auto _ :
state) {
71 for (
auto i = 0;
i <
state.range(0); ++
i) {
78BENCHMARK(BM_TableBuilderScalarPresized)->Arg(1 << 20);
79BENCHMARK(BM_TableBuilderScalarPresized)->Range(8, 8 << 16);
81static void BM_TableBuilderScalarBulk(benchmark::State& state)
84 auto chunkSize =
state.range(0) / 256;
85 std::vector<float>
buffer(chunkSize, 0.);
86 for (
auto _ :
state) {
89 for (
auto i = 0;
i <
state.range(0) / chunkSize; ++
i) {
90 bulkWriter(0, chunkSize,
buffer.data());
96BENCHMARK(BM_TableBuilderScalarBulk)->Range(256, 1 << 20);
98static void BM_TableBuilderSimple(benchmark::State& state)
101 for (
auto _ :
state) {
103 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
104 for (
auto i = 0;
i <
state.range(0); ++
i) {
105 rowWriter(0, 0.f, 0.f, 0.f);
113static void BM_TableBuilderSimple2(benchmark::State& state)
116 for (
auto _ :
state) {
118 auto rowWriter = builder.
persist<float, float,
float>({
"x",
"y",
"z"});
119 for (
auto i = 0;
i <
state.range(0); ++
i) {
120 rowWriter(0, 0.f, 0.f, 0.f);
137static void BM_TableBuilderSoA(benchmark::State& state)
140 for (
auto _ :
state) {
143 for (
auto i = 0;
i <
state.range(0); ++
i) {
144 rowWriter(0, 0.f, 0.f, 0.f);
152static void BM_TableBuilderComplex(benchmark::State& state)
155 for (
auto _ :
state) {
157 auto rowWriter = builder.
persist<
int, float, std::string,
bool>({
"x",
"y",
"s",
"b"});
158 for (
auto i = 0;
i <
state.range(0); ++
i) {
159 rowWriter(0, 0, 0.,
"foo",
true);
#define DECLARE_SOA_COLUMN(_Name_, _Getter_, _Type_)
BENCHMARK(BM_TableBuilderOverhead)
auto bulkPersist(std::array< char const *, NCOLUMNS > const &columnNames, size_t nRows)
auto reserve(o2::framework::pack< ARGS... > &&, int s)
auto persist(std::array< char const *, sizeof...(ARGS)+1 > const &columnNames)
std::shared_ptr< arrow::Table > finalize()
auto preallocatedPersist(std::array< char const *, NCOLUMNS > const &columnNames, int nRows)
GLdouble GLdouble GLdouble z
Defining PrimaryVertex explicitly as messageable.
FIXME: do not use data model tables.