Skip to content
Snippets Groups Projects
Commit 1237bd97 authored by Christoph Alt's avatar Christoph Alt
Browse files

some reworking of the fe2ti dashboard generation

parent 2e8542d1
Branches
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@ from dashboards.influx_queries import (Query,
join_variable_and,
show_tag_values)
from dashboards.legends import Units
from collections import namedtuple
description_markdown = r"""
......@@ -31,76 +32,84 @@ description_markdown = r"""
- Information about the different Hosts on the NHR@FAU [Testcluster](https://hpc.fau.de/systems-services/documentation-instructions/clusters/test-cluster/)
"""
Filter = namedtuple("Filter", ("name", "multi", "default_value"), defaults=('', True, ''))
PanelInfos = namedtuple("PanelInfos", ("name", "unit"))
def get_dashboard_variable(filter: Filter, measurment_name: str, data_source: str):
query = show_tag_values(measurment_name, filter.name)
kwargs = {}
if filter.multi:
kwargs.update({'includeAll': True, 'multi': True, })
if filter.default_value:
kwargs.update({'default': filter.default_value})
return get_dashboard_variable_query(filter.name, query, data_source, **kwargs)
def get_time_series_panel(field: PanelInfos,
data_source: str,
measurment_name: str,
*,
where=None,
group_by=None,
overrides=None):
query = Query(select_=field.name,
from_=measurment_name,
where_=where,
group_by=group_by)
return TimeSeries(
title=field.name,
dataSource=data_source,
targets=[get_influx_target(str(query))],
unit=field.unit,
pointSize=9,
overrides=overrides,
)
def dashboard_fe2ti():
data_source = "fe2ti"
measurment_name = "fe2ti"
row_repeat = "micro_problem_size"
other_filters = ["branch",
"benchmark_name",
"compiler",
"solver",
"mpi_ranks",
"omp_threads",
"ksp_tol"]
row_repeat_var = get_dashboard_variable_query(
row_repeat, show_tag_values(measurment_name, row_repeat), data_source, default='8')
host_var = get_dashboard_variable_query(
'host', show_tag_values(measurment_name, 'host'),
data_source, includeAll=False, multi=False, default='skylakesp2')
other_vars = [get_dashboard_variable_query(
filter, show_tag_values(measurment_name, filter), data_source)
for filter in other_filters
other_filters = [
Filter("micro_problem_size", True, '8'),
Filter("host", False, 'skylakesp2'),
Filter("branch"),
Filter("benchmark_name"),
Filter("compiler"),
Filter("solver"),
Filter("mpi_ranks"),
Filter("omp_threads"),
Filter("ksp_tol")
]
other_filters.append('host')
other_vars = [host_var, *other_vars]
where = join_variable_and([row_repeat, *other_filters])
fields = ["Time to solution",
"DP [MFLOP/s] STAT Sum",
"Operational intensity STAT Sum",
'AVX DP [MFLOP/s] STAT Sum" / "DP [MFLOP/s] STAT Sum',
'Memory bandwidth [MBytes/s] STAT Sum',
'Memory write bandwidth [MBytes/s] STAT Sum',
'Memory read bandwidth [MBytes/s] STAT Sum',
'Memory data volume [GBytes] STAT Sum',
'Memory read data volume [GBytes] STAT Sum',
'Memory write data volume [GBytes] STAT Sum',
'Energy [J] STAT Sum',
'Power [W] STAT Sum',
'Clock [MHz] STAT Avg',]
units = [Units.seconds,
Units.mflop_sec,
Units.flop_per_byte,
Units.percent,
Units.mbytes_per_second,
Units.mbytes_per_second,
Units.mbytes_per_second,
Units.gigabyte,
Units.gigabyte,
Units.gigabyte,
Units.joule,
Units.watt,
Units.megahertz,
]
queries = [Query(select_=field,
from_=measurment_name,
where_=where,
group_by=[row_repeat, *other_filters]
)
for field in fields
]
other_vars = [get_dashboard_variable(filter, measurment_name, data_source) for filter in other_filters]
row_repeat_var = other_vars[0]
where = join_variable_and([f.name for f in other_filters])
fields = [PanelInfos("Time to solution", Units.seconds),
PanelInfos("DP [MFLOP/s] STAT Sum", Units.mflop_sec),
PanelInfos("Operational intensity STAT Sum", Units.flop_per_byte),
PanelInfos('AVX DP [MFLOP/s] STAT Sum" / "DP [MFLOP/s] STAT Sum', Units.percent),
PanelInfos('Memory bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
PanelInfos('Memory write bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
PanelInfos('Memory read bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
PanelInfos('Memory data volume [GBytes] STAT Sum', Units.gigabyte),
PanelInfos('Memory read data volume [GBytes] STAT Sum', Units.gigabyte),
PanelInfos('Memory write data volume [GBytes] STAT Sum', Units.gigabyte),
PanelInfos('Energy [J] STAT Sum', Units.joule),
PanelInfos('Power [W] STAT Sum', Units.watt),
PanelInfos('Clock [MHz] STAT Avg', Units.megahertz), ]
options = DashboardOptions(
title="FE2ti Benchmarks",
description="Benchmarks for fe2ti",
tags=['benchmark', 'fe2ti'],
timezone="browser",
)
annotations = get_commit_annotation(data_source, "red", "commits",
measurment_name)
annotations = get_commit_annotation(data_source, "red", "commits", measurment_name)
overrides = [*[
get_color_regex_override(f".*[Ss]olver.*: {solver}.*", color)
for solver, color in [("pardiso", "#56A64B"), ("umfpack", "#F2CC0C"), ("ilu", "#3274D9")]
......@@ -111,23 +120,22 @@ def dashboard_fe2ti():
description_panel = pack_in_row("Legend", get_text_panel(description_markdown, title="FE2TI benchmarks"))
panels = [
TimeSeries(
title=field,
dataSource=data_source,
targets=[get_influx_target(str(query))],
unit=unit,
pointSize=9,
get_time_series_panel(
field,
data_source,
measurment_name,
where=where,
group_by=[f.name for f in other_filters],
overrides=overrides,
)
for field, query, unit in zip(fields, queries, units)
]
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=[description_panel, row],
templating=[row_repeat_var, *other_vars],
templating=[*other_vars],
annotations=annotations)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment