1from itertools
import combinations
3from pathlib
import Path
8machine =
"sapphire_rapid"
10patch_sizes = [3, 6, 16]
14 3: [
"1",
"2",
"4",
"8",
"16",
"32",
"64",
"128",
"256",
"512",
"1024",
"2048",
"4096",
"8192"],
15 6: [
"1",
"2",
"4",
"8",
"16",
"32",
"64",
"128",
"256",
"512",
"1024",
"2048",
"4096",
"8192"],
16 16: [
"1",
"2",
"4",
"8",
"16",
"32",
"64",
"128",
"256",
"512",
"1024",
"2048",
"4096",
"8192"]
21set_environment = f
"source {Path.home()}/set_env_x86_cpu_only.sh"
26 "memref-flattening":
"--enable-memref-flattening",
27 "function-inlining":
"--enable-function-inlining",
28 "memory-reuse":
"--enable-memory-reuse",
29 "memory-fusion":
"--enable-memory-fusion"
32output_name = f
"{application}_kernel_benchmark"
33job_name = f
"{application}_kernel_benchmark"
34output_root = f
"{Path.home()}/Peano/benchmarks/exahype2/kernel-benchmarks/"
35script_name = f
"submit_kernel_benchmark-cpu-serial-{application}-{solver}.sh"
38 benchmark_script_name =
"kernel-benchmarks-fd4-dsl.py"
39 benchmark_app_name =
"KernelBenchmarksFD4DSL.Release"
40if solver ==
"rusanov":
41 benchmark_script_name =
"kernel-benchmarks-fv-rusanov-dsl.py"
42 benchmark_app_name =
"KernelBenchmarksFVRusanovDSL.Release"
46 print_statement = f
"""echo "Patch Size: {patch_size}, C++" """
48 print_statement = f
"""echo "Patch Size: {patch_size}, MLIR, {", ".join(passes)}" """
49 pass_flags = [optional_passes[enabled_pass]
for enabled_pass
in passes]
50 return f
"""{print_statement}
51python {benchmark_script_name} -d 3 -cpu {"--enable-cpp" if use_cpp else "--enable-mlir"} -serial -ps {patch_size} -p {" ".join(number_of_patches)} -samples {number_of_samples} {" ".join(pass_flags)}
52./{benchmark_app_name} > {output_directory}/patch_size_{patch_size}.txt
56submission_scripts = []
58for patch_size
in patch_sizes:
59 number_of_patches = numbers_of_patches[patch_size]
62 for i
in range(0, len(optional_passes) + 1):
63 for combination
in list(combinations(optional_passes, i)):
64 pass_list.append(combination)
67 output_directory = output_root + f
"results/{application}/{solver}/cpu_serial/{machine}/cpp"
68 if not os.path.exists(output_directory):
69 os.makedirs(output_directory)
73 output_directory = output_root + f
"results/{application}/{solver}/cpu_serial/{machine}/no-passes"
74 if not os.path.exists(output_directory):
75 os.makedirs(output_directory)
79 for optional_pass
in optional_passes.keys():
80 output_directory = output_root + f
"results/{application}/{solver}/cpu_serial/{machine}/{optional_pass}"
81 if not os.path.exists(output_directory):
82 os.makedirs(output_directory)
85with open(script_name,
"w")
as file:
86 file.write(f
"""#!/bin/bash -l
88#SBATCH -o {output_name}.out
89#SBATCH -e {output_name}.err
90#SBATCH -t {runtime_hours}:00:00
98export PATH=~/Peano/src/exahype2/mlir/build/bin/:$PATH
99export PYTHONPATH=~/Peano/python/:~/Peano/applications/exahype2/ccz4/:~/Peano/src/
103 for script
in submission_scripts:
104 file.write(script +
"\n")
generate_submission_script_fragment(bool use_cpp, int patch_size, list[str] number_of_patches, list[str] passes, str output_directory)