3import sys, os, argparse
6sys.path.insert(0, os.path.abspath(
"../../../tests/aderdg"))
19parser = argparse.ArgumentParser(
20 description=
"ExaHyPE 2 - Fused ADER-DG Kernel Benchmarking Script"
25 choices=peano4.output.CompileModes,
26 default=peano4.output.CompileModes[0],
27 help=
"|".join(peano4.output.CompileModes),
34 default=[1, 2, 4, 8, 16],
35 help=
"Number of launching threads",
42 help=
"Order of the underlying ADER-DG solver.",
59 help=
"Number of patches to study",
66 help=
"Number of samples per measurement",
73 help=
"Floating point accuracy to which the different kernel variants have to match (absolute). Pass in 0 to disable correctness check. Pass in values < 0 to use machine epsilon (default).",
79 help=
"Assess host kernels",
85 help=
"Assess device kernels",
90 choices=[
"double",
"float",
"fp16",
"bf16"],
92 help=
"Precision in which the solver should be computed.",
97 choices=available_scenarios.keys(),
98 default=
"ElasticPlanarWaves",
99 help=
"Scenario which should be used as a base for the benchmarking",
106 help=
"Determines maximum size of a single cell on each axis.",
109args = parser.parse_args()
111scenario = available_scenarios[args.scenario]
113ader_solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
116 unknowns=scenario._equation.num_unknowns,
117 auxiliary_variables=scenario._equation.num_auxiliary_variables,
120 time_step_relaxation=0.5,
123ader_solver.add_kernel_optimisations(
124 polynomials=exahype2.solvers.aderdg.Polynomials.Gauss_Legendre,
125 is_linear=scenario._equation.is_linear,
126 precision=args.precision,
129ader_solver.set_implementation(
130 initial_conditions=scenario.initial_conditions(),
131 boundary_conditions=scenario.boundary_conditions(),
132 max_eigenvalue=scenario._equation.eigenvalues(),
133 flux=scenario._equation.flux(),
134 ncp=scenario._equation.ncp(),
135 riemann_solver=scenario._equation.riemann_solver(),
138project = exahype2.Project(
139 namespace=[
"benchmarks",
"exahype2",
"kernelbenchmarks"],
140 project_name=
"KernelBenchmarks",
142 executable=
"KernelBenchmarks",
144project.add_solver(ader_solver)
146project.set_global_simulation_parameters(
152 first_plot_time_stamp=0.0,
153 time_in_between_plots=0.0,
154 periodic_BC=[
False,
False],
157project.set_build_mode(mode=peano4.output.string_to_mode(args.build_mode))
158project = project.generate_Peano4_project(verbose=
False)
160accuracy = args.accuracy
164 accuracy = default = numpy.finfo(float).eps
165project.constants.export_constexpr_with_type(
"Accuracy", str(accuracy),
"double")
167project.constants.export_constexpr_with_type(
168 "NumberOfSamples", str(args.samples),
"int"
171formatted_num_cells =
"{{{}}}".format(
", ".join(str(val)
for val
in args.num_cells))
172project.constants.export_const_with_type(
173 "NumberOfCellsToStudy",
174 str(formatted_num_cells),
175 "tarch::la::Vector<%s, int>" % len(args.num_cells),
178formatted_num_threads =
"{{{}}}".format(
", ".join(str(val)
for val
in args.num_threads))
179project.constants.export_const_with_type(
180 "NumberOfLaunchingThreads",
181 str(formatted_num_threads),
182 "tarch::la::Vector<%s, int>" % len(args.num_threads),
185if args.cpu ==
False and args.gpu ==
False:
186 project.constants.export_boolean(
"AssessHostKernels",
True)
187 project.constants.export_boolean(
"AssessDeviceKernels",
True)
189 project.constants.export_boolean(
"AssessHostKernels",
True if args.cpu
else False)
190 project.constants.export_boolean(
"AssessDeviceKernels",
True if args.gpu
else False)
192makefile = project.output.makefile
194makefile.add_CXX_flag(
"-DSolverPrecision=" + args.precision)
197 makefile.add_cpp_file(
"Variant" + str(i) +
".cpp")
198makefile.add_h_file(
"Variants.h")
199makefile.add_cpp_file(
"KernelBenchmarks-main.cpp")
201project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)
Scenario reproduced from Dumbser & Käser, https://doi.org/10.1111/j.1365-246X.2006....
Very simple scenario in which the initial value of x is shifted in each spatial dimension.
Scenario reproduced from Dumbser & Käser, https://doi.org/10.1111/j.1365-246X.2006....
Scenario reproduced from Ioratti, Dumbser & Loubère, https://doi.org/10.1007/s10915-020-01209-w (p.
Scenario reproduced from Ioratti, Dumbser & Loubère, https://doi.org/10.1007/s10915-020-01209-w (p.
Classic radial dam break SWE equations, with constant initial water height but a bump in the bathymet...
Resting lake scenario for the shallow water equations.