Skip to content

Commit 2e8b47f

Browse files
committed
update advection benchmarl
1 parent 4339e88 commit 2e8b47f

File tree

4 files changed

+42
-68
lines changed

4 files changed

+42
-68
lines changed

benchmark/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
add_bench_executable(conv1d-bench)
2+
add_bench_executable(advection-bench)
Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
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

benchmark/bench_config.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
#include <vector>
66

77
enum AdvImpl : int {
8-
BR3D, // 0
9-
HIER, // 1
8+
// BR3D, // 0
9+
// HIER, // 1
1010
NDRA, // 2
1111
ADAPTWG, // 3
12-
HYBRID // 4
12+
// HYBRID // 4
1313
};
1414

1515
using bm_vec_t = std::vector<int64_t>;

benchmark/bench_utils.hpp

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,8 @@
33
#include <AdvectionParams.hpp>
44
#include <benchmark/benchmark.h>
55
#include <cstdint>
6-
#include <init.hpp>
76
#include <sycl/sycl.hpp>
8-
#include <types.hpp>
97
#include "bench_config.hpp"
10-
#include <impl_selector.hpp>
11-
128

139
// =============================================
1410
// =============================================
@@ -72,34 +68,3 @@ createSyclQueue(const bool run_on_gpu, benchmark::State &state) {
7268
return sycl::queue{d};
7369
} // end createSyclQueue
7470

75-
// =============================================
76-
// =============================================
77-
[[nodiscard]] inline sref::unique_ref<IAdvectorX>
78-
advectorFactory(const sycl::queue &q, ADVParams &p, AdvectionSolver &s,
79-
const AdvImpl kernel_id, benchmark::State &state) {
80-
ADVParamsNonCopyable params(p);
81-
82-
switch (kernel_id) {
83-
case AdvImpl::BR3D:
84-
params.kernelImpl = "BasicRange";
85-
break;
86-
case AdvImpl::HIER:
87-
params.kernelImpl = "Hierarchical";
88-
break;
89-
case AdvImpl::NDRA:
90-
params.kernelImpl = "NDRange";
91-
break;
92-
case AdvImpl::ADAPTWG:
93-
params.kernelImpl = "AdaptiveWg";
94-
break;
95-
case AdvImpl::HYBRID:
96-
params.kernelImpl = "HybridMem";
97-
break;
98-
default:
99-
auto str = "Error: wrong kernel_id.\n";
100-
throw std::runtime_error(str);
101-
break;
102-
}
103-
104-
return kernel_impl_factory(q, params, s);
105-
} // end advectorFactory

0 commit comments

Comments
 (0)