Peano
Loading...
Searching...
No Matches
generate-submission-script-cpu-serial.py
Go to the documentation of this file.
1from itertools import combinations
2import os
3from pathlib import Path
4
5# Configurable Options
6application = "euler"
7solver = "fd4"
8machine = "sapphire_rapid"
9runtime_hours = 24
10patch_sizes = [3, 6, 16]
11number_of_samples = 10
12
13numbers_of_patches = {
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"]
17}
18
19partition = "dine2"
20account = "do015"
21set_environment = f"source {Path.home()}/set_env_x86_cpu_only.sh"
22cores = 64
23memory = "2TB"
24
25optional_passes = {
26 "memref-flattening": "--enable-memref-flattening",
27 "function-inlining": "--enable-function-inlining",
28 "memory-reuse": "--enable-memory-reuse",
29 "memory-fusion": "--enable-memory-fusion"
30}
31
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"
36
37if solver == "fd4":
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"
43
44def generate_submission_script_fragment(use_cpp: bool, patch_size: int, number_of_patches: list[str], passes: list[str], output_directory: str):
45 if use_cpp:
46 print_statement = f"""echo "Patch Size: {patch_size}, C++" """
47 else:
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
53"""
54compile_scripts = []
55run_scripts = []
56submission_scripts = []
57
58for patch_size in patch_sizes:
59 number_of_patches = numbers_of_patches[patch_size]
60
61 pass_list = []
62 for i in range(0, len(optional_passes) + 1):
63 for combination in list(combinations(optional_passes, i)):
64 pass_list.append(combination)
65
66 # CPP
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)
70 submission_scripts.append(generate_submission_script_fragment(True, patch_size, number_of_patches, [], output_directory))
71
72 # MLIR No Passes
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)
76 submission_scripts.append(generate_submission_script_fragment(False, patch_size, number_of_patches, [], output_directory))
77
78 # MLIR Passes
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)
83 submission_scripts.append(generate_submission_script_fragment(False, patch_size, number_of_patches, [optional_pass], output_directory))
84
85with open(script_name, "w") as file:
86 file.write(f"""#!/bin/bash -l
87
88#SBATCH -o {output_name}.out
89#SBATCH -e {output_name}.err
90#SBATCH -t {runtime_hours}:00:00
91#SBATCH --nodes=1
92#SBATCH -J {job_name}
93#SBATCH -c {cores}
94#SBATCH -p {partition}
95#SBATCH -A {account}
96#SBATCH --mem={memory}
97
98export PATH=~/Peano/src/exahype2/mlir/build/bin/:$PATH
99export PYTHONPATH=~/Peano/python/:~/Peano/applications/exahype2/ccz4/:~/Peano/src/
100{set_environment}
101""")
102
103 for script in submission_scripts:
104 file.write(script + "\n")
105
generate_submission_script_fragment(bool use_cpp, int patch_size, list[str] number_of_patches, list[str] passes, str output_directory)