3import sys, os, argparse
6sys.path.insert(0, os.path.abspath(
"../../../tests/aderdg"))
19parser = argparse.ArgumentParser(
20 description=
"ExaHyPE 2 - ADER-DG Kernel Benchmarking Script"
25 choices=peano4.output.CompileModes,
26 default=peano4.output.CompileModes[0],
27 help=
"|".join(peano4.output.CompileModes),
34 help=
"Number of launching threads",
41 help=
"Order of the underlying ADER-DG solver.",
48 default=[32, 64, 128, 256, 512, 1024, 2048],
49 help=
"Number of patches to study",
56 help=
"Number of samples per measurement",
63 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).",
69 help=
"Assess host kernels",
75 help=
"Assess device kernels",
79 choices=[
"double",
"float",
"fp16",
"bf16"],
81 help=
"Precision in which the solver should be computed.",
86 choices=available_scenarios.keys(),
87 default=
"ElasticPlanarWaves",
88 help=
"Scenario which should be used as a base for the benchmarking",
95 help=
"Determines maximum size of a single cell on each axis.",
98args = parser.parse_args()
100scenario = available_scenarios[args.scenario]
102ader_solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
105 unknowns=scenario._equation.num_unknowns,
106 auxiliary_variables=scenario._equation.num_auxiliary_variables,
109 time_step_relaxation=0.5,
112ader_solver.add_kernel_optimisations(
113 polynomials=exahype2.solvers.aderdg.Polynomials.Gauss_Legendre,
114 is_linear=scenario._equation.is_linear,
115 precision=args.precision,
118ader_solver.set_implementation(
119 initial_conditions=scenario.initial_conditions(),
120 boundary_conditions=scenario.boundary_conditions(),
121 max_eigenvalue=scenario._equation.eigenvalues(),
122 flux=scenario._equation.flux(),
123 ncp=scenario._equation.ncp(),
124 riemann_solver=scenario._equation.riemann_solver(),
127project = exahype2.Project(
128 namespace=[
"benchmarks",
"exahype2",
"kernelbenchmarks"],
129 project_name=
"KernelBenchmarks",
131 executable=
"KernelBenchmarks",
133project.add_solver(ader_solver)
135project.set_global_simulation_parameters(
141 first_plot_time_stamp=0.0,
142 time_in_between_plots=0.0,
143 periodic_BC=[
False,
False],
146project.set_build_mode(mode=peano4.output.string_to_mode(args.build_mode))
147project = project.generate_Peano4_project(verbose=
False)
149accuracy = args.accuracy
153 accuracy = default = numpy.finfo(float).eps
154project.constants.export_constexpr_with_type(
"Accuracy", str(accuracy),
"double")
156project.constants.export_constexpr_with_type(
157 "NumberOfSamples", str(args.samples),
"int"
160formatted_num_cells =
"{{{}}}".format(
", ".join(str(val)
for val
in args.num_cells))
161project.constants.export_const_with_type(
162 "NumberOfCellsToStudy",
163 str(formatted_num_cells),
164 "tarch::la::Vector<%s, int>" % len(args.num_cells),
167project.constants.export_constexpr_with_type(
168 "NumberOfLaunchingThreads", str(args.num_threads),
"int"
171if args.cpu ==
False and args.gpu ==
False:
172 project.constants.export_boolean(
"AssessHostKernels",
True)
173 project.constants.export_boolean(
"AssessDeviceKernels",
True)
175 project.constants.export_boolean(
"AssessHostKernels",
True if args.cpu
else False)
176 project.constants.export_boolean(
"AssessDeviceKernels",
True if args.gpu
else False)
178project.output.makefile.add_cpp_file(
"KernelBenchmarks-main.cpp")
179project.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.