3 import sys, os, argparse
4 import peano4, exahype2
6 sys.path.insert(0, os.path.abspath(
"../../../../tests/exahype2/aderdg"))
9 available_scenarios = {
19 parser = 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.",
49 default=[64, 81, 128, 256, 512, 729, 1024, 2048],
50 help=
"Number of patches to study",
57 help=
"Number of samples per measurement",
64 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).",
70 help=
"Assess host kernels",
76 help=
"Assess device kernels",
82 help=
"Enable a floating-point exception handler.",
87 choices=[
"double",
"float",
"fp16",
"bf16"],
89 help=
"Precision in which the solver should be computed.",
94 choices=available_scenarios.keys(),
95 default=
"ElasticPlanarWaves",
96 help=
"Scenario which should be used as a base for the benchmarking",
99 args = parser.parse_args()
101 scenario = available_scenarios[args.scenario]
103 ader_solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
106 unknowns=scenario._equation.num_unknowns,
107 auxiliary_variables=scenario._equation.num_auxiliary_variables,
110 time_step_relaxation=0.5,
113 ader_solver.add_kernel_optimisations(
114 polynomials=exahype2.solvers.aderdg.Polynomials.Gauss_Legendre,
115 is_linear=scenario._equation.is_linear,
116 precision=args.precision,
119 ader_solver.set_implementation(
120 initial_conditions=scenario.initial_conditions(),
121 boundary_conditions=scenario.boundary_conditions(),
122 max_eigenvalue=scenario._equation.eigenvalues(),
123 flux=scenario._equation.flux(),
124 ncp=scenario._equation.ncp(),
125 riemann_solver=scenario._equation.riemann_solver(),
128 project = exahype2.Project(
129 namespace=[
"benchmarks",
"exahype2",
"kernelbenchmarks"],
130 project_name=
"KernelBenchmarks",
132 executable=
"KernelBenchmarks",
134 project.add_solver(ader_solver)
136 project.set_global_simulation_parameters(
142 first_plot_time_stamp=0.0,
143 time_in_between_plots=0.0,
144 periodic_BC=[
False,
False],
147 project.set_Peano4_installation(
148 "../../../../", mode=peano4.output.string_to_mode(args.build_mode)
150 project = project.generate_Peano4_project(verbose=
False)
152 accuracy = args.accuracy
156 accuracy = default = numpy.finfo(float).eps
157 project.constants.export_constexpr_with_type(
"Accuracy",
str(accuracy),
"double")
159 project.constants.export_constexpr_with_type(
160 "NumberOfSamples",
str(args.samples),
"int"
163 formatted_num_cells =
"{{{}}}".format(
", ".join(
str(val)
for val
in args.num_cells))
164 project.constants.export_const_with_type(
165 "NumberOfCellsToStudy",
166 str(formatted_num_cells),
167 "tarch::la::Vector<%s, int>" % len(args.num_cells),
170 formatted_num_threads =
"{{{}}}".format(
", ".join(
str(val)
for val
in args.num_threads))
171 project.constants.export_const_with_type(
172 "NumberOfLaunchingThreads",
str(formatted_num_threads),
173 "tarch::la::Vector<%s, int>" % len(args.num_threads),
177 project.constants.export_boolean(
"EnableFPE",
True)
179 project.constants.export_boolean(
"EnableFPE",
False)
181 if args.cpu ==
False and args.gpu ==
False:
182 project.constants.export_boolean(
"AssessHostKernels",
True)
183 project.constants.export_boolean(
"AssessDeviceKernels",
True)
185 project.constants.export_boolean(
"AssessHostKernels",
True if args.cpu
else False)
186 project.constants.export_boolean(
"AssessDeviceKernels",
True if args.gpu
else False)
188 makefile = project.output.makefile
190 makefile.add_CXX_flag(
"-DSolverPrecision="+args.precision)
192 for i
in range(1, 7):
193 makefile.add_cpp_file(
"Variant" +
str(i) +
".cpp")
194 makefile.add_h_file(
"Variants.h")
195 makefile.add_cpp_file(
"KernelBenchmarks-main.cpp")
197 project.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.