18#include <benchmark/benchmark.h>
20using namespace benchmark;
26static constexpr int64_t ITERATIONS = 256;
34static void bench_scalar_add(State& state)
38 for (
size_t i = 0; i < 5; ++i) {
42 for (
auto _ : state) {
43 for (int64_t it = 0; it < ITERATIONS; ++it) {
44 for (
size_t i = 0; i < 5; ++i) {
50 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
54static void bench_scalar_sub(State& state)
58 for (
size_t i = 0; i < 5; ++i) {
62 for (
auto _ : state) {
63 for (int64_t it = 0; it < ITERATIONS; ++it) {
64 for (
size_t i = 0; i < 5; ++i) {
70 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
74static void bench_scalar_mul(State& state)
78 for (
size_t i = 0; i < 5; ++i) {
82 for (
auto _ : state) {
83 for (int64_t it = 0; it < ITERATIONS; ++it) {
84 for (
size_t i = 0; i < 5; ++i) {
90 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
94static void bench_scalar_eq(State& state)
98 for (
size_t i = 0; i < 5; ++i) {
102 volatile int sink = 0;
103 for (
auto _ : state) {
104 for (int64_t it = 0; it < ITERATIONS; ++it) {
106 for (
size_t i = 0; i < 5; ++i) {
107 s += (
a[i] ==
b[i]) ? 1 : 0;
113 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
117static void bench_scalar_is_zero(State& state)
120 for (
size_t i = 0; i < 5; ++i) {
124 volatile int sink = 0;
125 for (
auto _ : state) {
126 for (int64_t it = 0; it < ITERATIONS; ++it) {
128 for (
size_t i = 0; i < 5; ++i) {
135 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
144static void bench_vector_add(State& state)
152 Vec a(a_in),
b(b_in);
153 for (
auto _ : state) {
154 for (int64_t it = 0; it < ITERATIONS; ++it) {
159 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
163static void bench_vector_sub(State& state)
171 Vec a(a_in),
b(b_in);
172 for (
auto _ : state) {
173 for (int64_t it = 0; it < ITERATIONS; ++it) {
178 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
182static void bench_vector_mul(State& state)
190 Vec a(a_in),
b(b_in);
191 for (
auto _ : state) {
192 for (int64_t it = 0; it < ITERATIONS; ++it) {
197 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
201static void bench_vector_eq(State& state)
209 Vec a(a_in),
b(b_in);
210 volatile uint32_t sink = 0;
211 for (
auto _ : state) {
212 for (int64_t it = 0; it < ITERATIONS; ++it) {
213 sink +=
a.eq_mask(
b);
217 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
221static void bench_vector_is_zero(State& state)
225 volatile uint32_t sink = 0;
226 for (
auto _ : state) {
227 for (int64_t it = 0; it < ITERATIONS; ++it) {
228 sink +=
a.is_zero_mask();
232 state.SetItemsProcessed(
static_cast<int64_t
>(state.iterations()) * ITERATIONS * 5);
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static field random_element(numeric::RNG *engine=nullptr) noexcept
BB_INLINE constexpr bool is_zero() const noexcept
static constexpr field zero()
BENCHMARK(bench_scalar_add)