diff --git a/dashboards/dashboard_walberla.py b/dashboards/dashboard_walberla.py index cc9b19bc4be7d988354e3638fa07f426a1bdc3aa..fe2f3aead01d039173b5c86ca39eeebeb6b2f6a2 100644 --- a/dashboards/dashboard_walberla.py +++ b/dashboards/dashboard_walberla.py @@ -11,6 +11,19 @@ from dashboards.variables import get_dashboard_variable, Filter from dashboards.influx_queries import join_variable_and from dashboards.legends import Units +from cbutil.ncu_keys import ( + memory_write_data_key, + memory_read_data_key, + memory_data_key, + memory_write_bandwidth_key, + memory_read_bandwidth_key, + memory_bandwidth_key, + runtime_key, + operational_intensity_key, + p_max_key, + dp_key, +) + def dashboard_uniformgridcpu(): data_source = 'InfluxDB-1' @@ -153,3 +166,84 @@ def dashboard_uniformgridgpu(): rows=[row], templating=[*filter_vars], annotations=annotations) + + +def dashboard_uniformgridgpu_profile(): + data_source = 'InfluxDB-1' + arch = 'GPU' + measurment_name = f'UniformGrid{arch}_profile' + row_repeat = "host" + + options = DashboardOptions( + title=f'Uniform Grid {arch} GPU Profiling', + description=f"Benchmark dashboard for the Uniform Grid {arch} Benchmark from walberla", + tags=[arch, 'benchmark', 'walberla', 'Uniform Grid', 'profiling'], + timezone="browser", + ) + + filters = [ + Filter("project_id", multi=True, default_value='walberla/walberla'), + Filter("branch", multi=True, default_value='master'), + Filter("host", multi=False, default_value='medusa'), + Filter("GPU"), + Filter("collisionSetup"), + Filter("mpi_num_processes"), + Filter("streamingPattern"), + Filter("timeStepStrategy"), + Filter("stencil"), + Filter("blocks_0"), + Filter("blocks_1"), + Filter("blocks_2"), + Filter("cellsPerBlock_0"), + Filter("cellsPerBlock_1"), + Filter("cellsPerBlock_2"), + Filter("gpuBlockSize_0"), + Filter("gpuBlockSize_1"), + Filter("gpuBlockSize_2"), + Filter("periodic_0"), + Filter("periodic_1"), + Filter("periodic_2"), + ] + + fields = [ + PanelInfos("mlupsPerProcess", Units.number), + PanelInfos("Runtime (RDTSC) [s]", Units.seconds), + PanelInfos("DP [MFLOP/s]", Units.mflop_sec), + PanelInfos("Operational intensity", Units.flop_per_byte), + PanelInfos('AVX DP [MFLOP/s]" / "DP [MFLOP/s]', Units.percent), + PanelInfos('Memory bandwidth [MBytes/s]', Units.mbytes_per_second), + PanelInfos('Memory write bandwidth [MBytes/s]', Units.mbytes_per_second), + PanelInfos('Memory read bandwidth [MBytes/s]', Units.mbytes_per_second), + PanelInfos('Memory data volume [GBytes]', Units.gigabyte), + PanelInfos('Memory read data volume [GBytes]', Units.gigabyte), + PanelInfos('Memory write data volume [GBytes]', Units.gigabyte), + PanelInfos('Energy [J]', Units.joule), + PanelInfos('Power [W]', Units.watt), + PanelInfos('Clock [MHz] STAT Avg', Units.megahertz), ] + + filter_vars = [get_dashboard_variable(filter, measurment_name, data_source) for filter in filters] + + row_repeat_var = [fv for fv in filter_vars if fv.name == row_repeat][0] + + where = join_variable_and([f.name for f in filters]) + annotations = get_commit_annotation(data_source, "red", "commits", measurment_name) + + panels = [ + get_time_series_panel( + field, + data_source, + measurment_name, + where=where, + group_by=[f.name for f in filters], + ) + for field in fields] + + row = pack_in_row( + title=f"{row_repeat}: ${row_repeat_var.name}", + panels=[*panels], + repeat=Repeat('v', row_repeat_var.name), + ) + return build_dashboard(options, + rows=[row], + templating=[*filter_vars], + annotations=annotations) diff --git a/dashboards/deploy.py b/dashboards/deploy.py index ab55de7f8751dee5996db421321922c63591a738..3f48831047608bac9e319d605443112c1905548b 100644 --- a/dashboards/deploy.py +++ b/dashboards/deploy.py @@ -5,7 +5,7 @@ import dashboards.dashboard_list as boards from dashboards.upload import upload_dashboard from dashboards.dashboard_fe2ti import dashboard_fe2ti from dashboard_pystencils import dashboard_pystencils_cpu, dashboard_pystencils_gpu -from dashboard_walberla import dashboard_uniformgridcpu, dashboard_uniformgridgpu +from dashboard_walberla import dashboard_uniformgridcpu, dashboard_uniformgridgpu, dashboard_uniformgridgpu_profile logger = logging.getLogger(__file__) logger.setLevel(logging.INFO) @@ -44,6 +44,7 @@ def main(): elif "walberla" in board_name: upload_dashboard(dashboard_uniformgridcpu(), folder=walberla_folder) upload_dashboard(dashboard_uniformgridgpu(), folder=walberla_folder) + upload_dashboard(dashboard_uniformgridgpu_profile(), folder=walberla_folder) else: board = getattr(boards, board_name) upload_dashboard(board(), folder=walberla_folder)