From 5a335dfe80ae7a7e46df3b37b23fa7613683fb40 Mon Sep 17 00:00:00 2001 From: Michael Zikeli <michael.zikeli@fau.de> Date: Thu, 6 Feb 2025 18:29:43 +0100 Subject: [PATCH] [ci skip] Add benchmark name parameter to Scenario class and enhance schema update logic. --- .../simulation_setup/benchmark_configs_RDM.py | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/benchmarks/UniformGridCPU/simulation_setup/benchmark_configs_RDM.py b/apps/benchmarks/UniformGridCPU/simulation_setup/benchmark_configs_RDM.py index ce2a49930..a6b13fd80 100644 --- a/apps/benchmarks/UniformGridCPU/simulation_setup/benchmark_configs_RDM.py +++ b/apps/benchmarks/UniformGridCPU/simulation_setup/benchmark_configs_RDM.py @@ -60,11 +60,13 @@ ldc_setup = {'Border': [ class Scenario: - def __init__(self, cells_per_block=(128, 128, 128), periodic=(1, 1, 1), blocks_per_process=1, + def __init__(self, benchmark_name="not defined", cells_per_block=(128, 128, 128), periodic=(1, 1, 1), blocks_per_process=1, timesteps=None, time_step_strategy="normal", omega=1.8, inner_outer_split=(1, 1, 1), warmup_steps=2, outer_iterations=3, init_shear_flow=False, boundary_setup=False, vtk_write_frequency=0, remaining_time_logger_frequency=-1, db_file_name=None): + self.benchmark_name = benchmark_name + if boundary_setup: init_shear_flow = False periodic = (0, 0, 0) @@ -125,6 +127,7 @@ class Scenario: data.update(self.config_dict['DomainSetup']) data.update(kwargs) + data['Identifier'] = self.benchmark_name data['executable'] = sys.argv[0] data['compile_flags'] = wlb.build_info.compiler_flags data['walberla_version'] = wlb.build_info.version @@ -143,12 +146,23 @@ class Scenario: result = data sequenceValuesToScalars(result) num_tries = 4 - # check multiple times e.g. may fail when multiple benchmark processes are running table_name = "runs" table_name = table_name.replace("-", "_") + for num_try in range(num_tries): try: - checkAndUpdateSchema(result, table_name, self.db_file_name) + # Check existing columns + conn = sqlite3.connect(self.db_file_name) + c = conn.cursor() + c.execute(f"PRAGMA table_info({table_name})") + existing_columns = [info[1] for info in c.fetchall()] + conn.close() + + # Filter out existing columns + new_columns = {k: v for k, v in result.items() if k not in existing_columns} + + if new_columns: + checkAndUpdateSchema(new_columns, table_name, self.db_file_name, alter_table=True) storeSingle(result, table_name, self.db_file_name) break except sqlite3.OperationalError as e: @@ -165,7 +179,8 @@ def weak_scaling_benchmark(): scenarios = wlb.ScenarioManager() for t in ["simpleOverlap"]: - scenarios.add(Scenario(time_step_strategy=t, + scenarios.add(Scenario(benchmark_name="weakScalingUniformGrid", + time_step_strategy=t, inner_outer_split=(1, 1, 1), cells_per_block=(WeakX, WeakY, WeakZ), boundary_setup=True, @@ -184,7 +199,8 @@ def strong_scaling_benchmark(): cells_per_block = tuple([d // b for d, b in zip(domain_size, reversed(blocks))]) for t in ["simpleOverlap"]: - scenarios.add(Scenario(cells_per_block=cells_per_block, + scenarios.add(Scenario(benchmark_name="strongScalingUniformGridOneBlock", + cells_per_block=cells_per_block, time_step_strategy=t, outer_iterations=1, timesteps=num_time_steps(cells_per_block), @@ -198,7 +214,8 @@ def single_node_benchmark(): wlb.log_info_on_root("") scenarios = wlb.ScenarioManager() - scenario = Scenario(cells_per_block=(128, 128, 128), + scenario = Scenario(benchmark_name="singleNodeUniformGridOneBlock", + cells_per_block=(128, 128, 128), time_step_strategy='kernelOnly', outer_iterations=1, timesteps=10) @@ -213,7 +230,8 @@ def validation_run(): time_step_strategy = "noOverlap" # "noOverlap" scenarios = wlb.ScenarioManager() - scenario = Scenario(cells_per_block=(64, 64, 64), + scenario = Scenario(benchmark_name="validationUniformGrid", + cells_per_block=(64, 64, 64), time_step_strategy=time_step_strategy, timesteps=201, outer_iterations=1, -- GitLab