11#include " bench_config.hpp"
22#include " bench_utils.hpp"
3- #include < benchmark/benchmark.h>
3+ #include < AdvectionParams.hpp>
4+ #include < AdvectionSolver.hpp>
5+ #include < sycl/sycl.hpp>
6+ #include < init.hpp>
47#include < validation.hpp>
8+
9+ #include < bkma.hpp>
510#include < types.hpp>
11+ #include < impl_selector.hpp>
12+
613
714
815// ==========================================
@@ -16,37 +23,27 @@ BM_Advection(benchmark::State &state) {
1623 params.n0 = EXP_SIZES[state.range (2 )].n0_ ;
1724 params.n1 = EXP_SIZES[state.range (2 )].n1_ ;
1825 params.n2 = EXP_SIZES[state.range (2 )].n2_ ;
26+ auto const &n0 = params.n0 ;
27+ auto const &n1 = params.n1 ;
28+ auto const &n2 = params.n2 ;
1929
2030 /* SYCL setup */
2131 auto Q = createSyclQueue (params.gpu , state);
22- auto data =
23- sycl::malloc_device<real_t >(params.n0 * params.n1 * params.n2 , Q);
24-
25- /* Advector setup */
26- Solver solver (params);
27- const auto kernel_id = static_cast <AdvImpl>(state.range (1 ));
28- const auto advector = advectorFactory (Q, params, solver, kernel_id, state);
29-
30- /* Benchmark infos */
31- state.counters .insert ({
32- {" gpu" , params.gpu },
33- {" n0" , params.n0 },
34- {" n1" , params.n1 },
35- {" n2" , params.n2 },
36- {" kernel_id" , kernel_id},
37- {" pref_wg_size" , params.pref_wg_size },
38- {" seq_size0" , params.seq_size0 },
39- {" seq_size2" , params.seq_size2 },
40- });
41-
42- /* Physics setup */
43- fill_buffer (Q, data, params);
32+ span3d_t data (sycl_alloc (n0*n1*n2, Q), n0, n1, n2);
4433 Q.wait ();
34+ fill_buffer_adv (Q, data, params);
35+ Q.wait ();
36+
37+ /* Advector setup */
38+ AdvectionSolver solver (params);
39+ auto optim_params = create_optim_params<ADVParams>(Q, params);
40+ auto impl_str = state.range (1 ) == 0 ? " ndrange" : " adaptivewg" ;
41+ auto bkma_run_function = impl_selector<AdvectionSolver>(impl_str);
4542
4643 /* Benchmark */
4744 for (auto _ : state) {
4845 try {
49- advector (Q, data, solver);
46+ bkma_run_function (Q, data, solver, optim_params, span3d_t {} );
5047 Q.wait ();
5148 } catch (const sycl::exception &e) {
5249 state.SkipWithError (e.what ());
@@ -58,18 +55,29 @@ BM_Advection(benchmark::State &state) {
5855
5956 params.maxIter = state.iterations ();
6057
61- state.SetItemsProcessed (params.maxIter * params. n0 * params. n1 * params. n2 );
62- state.SetBytesProcessed (params.maxIter * params. n0 * params. n1 * params. n2 *
63- sizeof (real_t ));
64- auto err = validate_result (Q, data, params, false );
58+ state.SetItemsProcessed (params.maxIter * n0 * n1 * n2);
59+ state.SetBytesProcessed (params.maxIter * n0 * n1 * n2 *
60+ sizeof (real_t )* 2 );
61+ auto err = validate_result_adv (Q, data, params, false );
6562
6663 // if (err > 10e-6) {
6764 // state.SkipWithError("Validation failed with numerical error > 10e-6.");
6865 // }
6966
70- state.counters .insert ({{" err" , err}});
67+ /* Benchmark infos */
68+ state.counters .insert ({
69+ {" gpu" , params.gpu },
70+ {" n0" , n0},
71+ {" n1" , n1},
72+ {" n2" , n2},
73+ {" kernel_id" , state.range (1 )},
74+ {" pref_wg_size" , params.pref_wg_size },
75+ {" seq_size0" , params.seq_size0 },
76+ {" seq_size2" , params.seq_size2 },
77+ {" err" , err}
78+ });
7179
72- sycl::free (data, Q);
80+ sycl::free (data. data_handle () , Q);
7381 Q.wait ();
7482}
7583
0 commit comments