@@ -92,6 +92,7 @@ using S10span = wrapper::wrapper<S10, std::span, L>;
9292using S64span = wrapper::wrapper<S64, std::span, L>;
9393using Snbodyspan = wrapper::wrapper<Snbody, std::span, L>;
9494using Sstencilspan = wrapper::wrapper<Sstencil, std::span, L>;
95+ using PxPyPzMspan = wrapper::wrapper<PxPyPzM, std::span, L>;
9596
9697INSTANTIATE_BENCHMARKS_F1 (BM_CPUEasyRW, S2span, N_Large);
9798INSTANTIATE_BENCHMARKS_F1 (BM_CPUEasyCompute, S2span, N);
@@ -100,49 +101,37 @@ INSTANTIATE_BENCHMARKS_F1(BM_CPUHardRW, S64span, N);
100101INSTANTIATE_BENCHMARKS_F1 (BM_nbody, Snbodyspan, N);
101102INSTANTIATE_BENCHMARKS_F1 (BM_stencil, Sstencilspan, N_Large);
102103
103- BENCHMARK_MAIN ();
104+ template <typename wrapper_span1, typename wrapper_span2, typename N>
105+ class Fixture2 : public benchmark ::Fixture {
106+ public:
107+ static constexpr auto n = N::value;
104108
105- /*
106- template <template <template <class> class> class S>
107- void RegisterBenchmarkHelper(const char* name, auto bm_func, std::vector<std::byte*>& buffer_pointers, auto &N) {
108- for (auto n : N) {
109- std::size_t bytes = n * factory::get_size_in_bytes<S, L>();
110- buffer_pointers.emplace_back(new std::byte[bytes]);
111- auto t = factory::buffer_wrapper<S, L>(buffer_pointers.back(), bytes);
112- using wrapper_type = wrapper::wrapper<S, std::span, L>;
113- wrapper_type t_span(t);
114- benchmark::RegisterBenchmark(name, bm_func, t_span)->Arg(n)->Unit(benchmark::kMillisecond);
115- }
116- }
117-
118- int main(int argc, char** argv) {
119-
120- std::vector<std::byte *> buffer_pointers;
121-
122- RegisterBenchmarkHelper<S2>("BM_CPUEasyRW", BM_CPUEasyRW<wrapper::wrapper<S2, std::span, L>>, buffer_pointers, N_Large);
123- RegisterBenchmarkHelper<S2>("BM_CPUEasyCompute", BM_CPUEasyCompute<wrapper::wrapper<S2, std::span, L>>, buffer_pointers, N);
124- RegisterBenchmarkHelper<S10>("BM_CPURealRW", BM_CPURealRW<wrapper::wrapper<S10, std::span, L>>, buffer_pointers, N);
125- RegisterBenchmarkHelper<S64>("BM_CPUHardRW", BM_CPUHardRW<wrapper::wrapper<S64, std::span, L>>, buffer_pointers, N);
126- RegisterBenchmarkHelper<Snbody>("BM_nbody", BM_nbody<wrapper::wrapper<Snbody, std::span, L>>, buffer_pointers, N);
127- RegisterBenchmarkHelper<Sstencil>("BM_stencil", BM_stencil<wrapper::wrapper<Sstencil, std::span, L>>, buffer_pointers, N_Large);
128-
129- for (std::size_t n : N_Large) {
130- std::size_t bytes = n * factory::get_size_in_bytes<PxPyPzM, L>();
131- auto buffer1 = new std::byte[bytes];
132- auto buffer2 = new std::byte[bytes];
133- auto tpxpypxm1 = factory::buffer_wrapper<PxPyPzM, L>(buffer1, bytes);
134- auto tpxpypxm2 = factory::buffer_wrapper<PxPyPzM, L>(buffer2, bytes);
135- using wrapper_type = wrapper::wrapper<PxPyPzM, std::span, L>;
136- wrapper_type t_span1(tpxpypxm1);
137- wrapper_type t_span2(tpxpypxm2);
138- benchmark::RegisterBenchmark("BM_InvariantMass", BM_InvariantMass<wrapper_type, wrapper_type>,
139- t_span1, t_span2)->Arg(n)->Unit(benchmark::kMillisecond);
109+ template <template <class > class F_type >
110+ using S1 = wrapper_span1::template S_type<F_type>;
111+
112+ template <template <class > class F_type >
113+ using S2 = wrapper_span2::template S_type<F_type>;
114+
115+ std::byte *buffer1, *buffer2;
116+ wrapper_span1 t1;
117+ wrapper_span2 t2;
118+
119+ void SetUp (::benchmark::State &state) override
120+ {
121+ std::size_t bytes1 = n * factory::get_size_in_bytes<S1, L>();
122+ buffer1 = new std::byte[bytes1];
123+ std::size_t bytes2 = n * factory::get_size_in_bytes<S2, L>();
124+ buffer2 = new std::byte[bytes2];
125+
126+ auto s1 = factory::buffer_wrapper<S1, L>(buffer1, bytes1);
127+ auto s2 = factory::buffer_wrapper<S2, L>(buffer2, bytes2);
128+ t1 = static_cast <wrapper_span1>(s1);
129+ t2 = static_cast <wrapper_span2>(s2);
140130 }
141131
142- benchmark::Initialize(&argc, argv);
143- benchmark::RunSpecifiedBenchmarks();
144- benchmark::Shutdown();
132+ void TearDown (::benchmark::State &state) override { std::free (buffer1); std::free (buffer2); }
133+ };
134+
135+ BENCHMARK_MAIN ();
145136
146- for (std::byte * buffer_ptr : buffer_pointers) std::free(buffer_ptr);
147- }
148- */
137+ INSTANTIATE_BENCHMARKS_F2 (BM_InvariantMass, PxPyPzMspan, PxPyPzMspan, N_Large);
0 commit comments