Skip to content
Snippets Groups Projects
dashboard_list.py 9.9 KiB
Newer Older
Christoph Alt's avatar
Christoph Alt committed
from typing import List

from dashboards.dashboard_base import (DashboardOptions, build_dashboard,
Christoph Alt's avatar
Christoph Alt committed
                                       build_row_repeat_dashboard,
                                       get_dashboard_variable_query,
Christoph Alt's avatar
Christoph Alt committed
                                       get_grid_pos, get_stat_panel,
                                       pack_in_row,
                                       get_dashboard_list)
from dashboards.influx_queries import (Query, get_variable_condition,
                                       join_conditions, join_variable_and,
                                       show_tag_values)
from dashboards.units import Units
Christoph Alt's avatar
Christoph Alt committed


def _uniform_grid(arch: str, group_by: List[str]):
    dataSource = 'InfluxDB-1'
    measurment_name = f'UniformGrid{arch}'
    row_repeat = "collisionSetup"
    panel_repeat = "host"
Christoph Alt's avatar
Christoph Alt committed
    unit = Units.mlups
Christoph Alt's avatar
Christoph Alt committed

Christoph Alt's avatar
Christoph Alt committed
    row_repeat_var = get_dashboard_variable_query(
        row_repeat, show_tag_values(measurment_name, row_repeat), dataSource)
    panel_repeat_var = get_dashboard_variable_query(
        panel_repeat, show_tag_values(measurment_name, panel_repeat),
        dataSource)
Christoph Alt's avatar
Christoph Alt committed
    other_filter = 'cellsPerBlock_0'
Christoph Alt's avatar
Christoph Alt committed
    cellsPerBlock_var = get_dashboard_variable_query(
        other_filter, show_tag_values(measurment_name, other_filter),
        dataSource)
Christoph Alt's avatar
Christoph Alt committed
    where = join_variable_and([row_repeat, panel_repeat, other_filter])
Christoph Alt's avatar
Christoph Alt committed
    query = Query(select_='mlupsPerProcess',
                  from_=measurment_name,
                  where_=where,
                  group_by=group_by)
Christoph Alt's avatar
Christoph Alt committed
    options = DashboardOptions(
        title=f'Uniform Grid {arch}',
        description=f"Benchmark dashboard for the Uniform Grid {arch} Benchmark from walberla",
Christoph Alt's avatar
Christoph Alt committed
        tags=[arch, 'benchmark', 'walberla', 'Uniform Grid'],
Christoph Alt's avatar
Christoph Alt committed
        timezone="browser",
    )

    annotations = get_commit_annotation("InfluxDB-1", "red", "commits",
                                        measurment_name)
Christoph Alt's avatar
Christoph Alt committed
    return build_row_repeat_dashboard(options, row_repeat_var,
                                      panel_repeat_var, dataSource,
                                      measurment_name, query, unit,
                                      [cellsPerBlock_var],
                                      annotations=annotations)
Christoph Alt's avatar
Christoph Alt committed


def dashboard_uniformGridGPU():
Christoph Alt's avatar
Christoph Alt committed
    group_by = [
        "blocks_0",
        "blocks_1",
        "blocks_2",
        "cellsPerBlock_0",
        "cellsPerBlock_1",
        "cellsPerBlock_2",
        "gpuBlockSize_0",
        "gpuBlockSize_1",
        "gpuBlockSize_2",
        "collisionSetup",
        "stencil",
        "streamingPattern",
    ]
Christoph Alt's avatar
Christoph Alt committed

    return _uniform_grid("GPU", group_by)


def dashboard_uniformGridCPU():
Christoph Alt's avatar
Christoph Alt committed
    group_by = [
        "blocks_0",
        "blocks_1",
        "blocks_2",
        "cellsPerBlock_0",
        "cellsPerBlock_1",
        "cellsPerBlock_2",
        "periodic_0",
        "periodic_1",
        "periodic_2",
        "collisionSetup",
        "mpi_num_processes",
        "streamingPattern",
        "timeStepStrategy",
        "stencil",
    ]
Christoph Alt's avatar
Christoph Alt committed

    return _uniform_grid("CPU", group_by)


def dashboard_granular_gas():
    dataSource = 'InfluxDB-1'
    measurment_name = 'MESA_PD_KernelBenchmark'
    row_repeat = "kernel"
    panel_repeat = "host"
Christoph Alt's avatar
Christoph Alt committed
    unit = Units.milliseconds

    row_repeat_var = get_dashboard_variable_query(
        row_repeat, f"SHOW FIELD KEYS FROM {measurment_name}", dataSource)
    panel_repeat_var = get_dashboard_variable_query(
        panel_repeat, show_tag_values(measurment_name, panel_repeat),
        dataSource)
    query = Query(select_='$kernel',
                  from_=measurment_name,
                  where_=f'"{panel_repeat}" =~ /^${panel_repeat}$/',
                  group_by=['mpi_num_processes', 'omp_max_threads'])
Christoph Alt's avatar
Christoph Alt committed
    options = DashboardOptions(
        title='Granular Gas Kernel Benchmark',
        description="Benchmark dashboard for the Granular Gas Benchmark from walberla",
Christoph Alt's avatar
Christoph Alt committed
        tags=['CPU', 'benchmark', 'walberla', 'Granular Gas'],
Christoph Alt's avatar
Christoph Alt committed
        timezone="browser",
    )

    annotations = get_commit_annotation("InfluxDB-1", "red", "commits",
                                        measurment_name)
Christoph Alt's avatar
Christoph Alt committed
    return build_row_repeat_dashboard(options, row_repeat_var,
                                      panel_repeat_var, dataSource,
                                      measurment_name, query, unit,
                                      annotations=annotations)
Christoph Alt's avatar
Christoph Alt committed


def dashboard_phasefieldallenchan():
    dataSource = 'InfluxDB-1'
    measurment_name = 'PhaseFieldAllenCahn'
    row_repeat = "cellsPerBlock_0"
    panel_repeat = "host"
Christoph Alt's avatar
Christoph Alt committed
    unit = Units.mlups
Christoph Alt's avatar
Christoph Alt committed

    options = DashboardOptions(
        title='Phase Field Allen Chan',
        description="Benchmark dashboard for the Phasefield Allen Cahn Benchmark from walberla",
Christoph Alt's avatar
Christoph Alt committed
        tags=['CPU', 'benchmark', 'walberla', 'PhaseField Allen Cahn'],
Christoph Alt's avatar
Christoph Alt committed
        timezone="browser",
    )
Christoph Alt's avatar
Christoph Alt committed
    row_repeat_var = get_dashboard_variable_query(
        row_repeat, show_tag_values(measurment_name, row_repeat), dataSource)
    panel_repeat_var = get_dashboard_variable_query(
        panel_repeat, show_tag_values(measurment_name, panel_repeat),
        dataSource)
    query = Query(select_='mlupsPerProcess',
                  from_=measurment_name,
                  where_=join_variable_and([row_repeat, panel_repeat]),
                  group_by=[
                      "blocks_0", "blocks_1", "blocks_2", "cellsPerBlock_0",
                      "mpi_num_processes", "host", "executable",
                      "timeStepStrategy", "stencil_phase", "stencil_hydro"
                  ])

    power_query = Query(select_="Power Core [W]",
                        from_="PhaseFieldAllenCahn_ENERGY",
                        where_=get_variable_condition(panel_repeat))
Christoph Alt's avatar
Christoph Alt committed

    panel_power = get_stat_panel("Total Power Consumption on $host in Watt[W]",
                                 dataSource,
                                 power_query,
                                 repeat=panel_repeat_var,
                                 format='W')

    annotations = get_commit_annotation("InfluxDB-1", "red", "commits",
                                        measurment_name)
Christoph Alt's avatar
Christoph Alt committed
    dashboard = build_row_repeat_dashboard(options, row_repeat_var,
                                           panel_repeat_var, dataSource,
                                           measurment_name, query, unit,
                                           annotations=annotations)
Christoph Alt's avatar
Christoph Alt committed
    dashboard.rows = [
        pack_in_row("Power Consumption", panel_power), *dashboard.rows
    ]
Christoph Alt's avatar
Christoph Alt committed
    return dashboard.auto_panel_ids()


def dashboard_phasefieldallenchangpu():
    dataSource = 'InfluxDB-1'
    measurment_name = 'PhaseFieldAllenCahnGPU'
    row_repeat = "cellsPerBlock_0"
    panel_repeat = "host"
Christoph Alt's avatar
Christoph Alt committed
    unit = Units.mlups

    options = DashboardOptions(
        title='Phase Field Allen Chan GPU',
        description="Benchmark dashboard for the Phasefield Allen Cahn Benchmark from walberla",
Christoph Alt's avatar
Christoph Alt committed
        tags=['GPU', 'benchmark', 'walberla', 'PhaseField Allen Cahn'],
Christoph Alt's avatar
Christoph Alt committed
    row_repeat_var = get_dashboard_variable_query(
        row_repeat, show_tag_values(measurment_name, row_repeat), dataSource)
    panel_repeat_var = get_dashboard_variable_query(
        panel_repeat, show_tag_values(measurment_name, panel_repeat),
        dataSource)
    query = Query(select_='mlupsPerProcess',
                  from_=measurment_name,
                  where_=join_variable_and([row_repeat, panel_repeat]),
                  group_by=[
                      "blocks_0", "blocks_1", "blocks_2", "gpuBlockSize_0",
                      "gpuBlockSize_1", "gpuBlockSize_2", "cellsPerBlock_0",
                      "mpi_num_processes", "host", "executable",
                      "timeStepStrategy", "stencil_phase", "stencil_hydro"
                  ])
    annotations = get_commit_annotation("InfluxDB-1", "red", "commits",
                                        measurment_name)
Christoph Alt's avatar
Christoph Alt committed

    return build_row_repeat_dashboard(options, row_repeat_var,
                                      panel_repeat_var, dataSource,
                                      measurment_name, query, unit,
                                      annotations=annotations)


def dashboard_general_infos():
    dataSource = 'InfluxDB-1'
    measurment_name = "JOB_INFOS"

    host_var = get_dashboard_variable_query('host',
                                            show_tag_values("", 'host'),
                                            dataSource)

    def get_query(name_base: str):
        return Query(
            select_="duration",
            from_=measurment_name,
Christoph Alt's avatar
Christoph Alt committed
            where_=join_conditions(
                [f'"name" =~ /{name_base}/', f'"name" =~ /${host_var.name}/'],
                "AND"),
            group_by=['name'])
    options = DashboardOptions(
        title='Overview',
        description="General Information about walberla benchmarks",
        tags=[
            'walberla',
        ],
        timezone="browser",
    )
    cpu_list = get_dashboard_list('CPU Benchmarks', ['walberla', 'CPU'], gridPos=get_grid_pos(10, 12, 0, 0))
    gpu_list = get_dashboard_list('GPU Benchmarks', ['walberla', 'GPU'], gridPos=get_grid_pos(10, 12, 13, 0))

    panel_build = get_stat_panel("Build Times",
                                 dataSource,
                                 get_query("build"),
                                 gridPos=get_grid_pos(12, 24, 0, 13),
Christoph Alt's avatar
Christoph Alt committed
                                 format='s',
Christoph Alt's avatar
Christoph Alt committed
                                 alias="$tag_name")
    panel_benchmark = get_stat_panel("Benchmark Runtime",
                                     dataSource,
                                     get_query("benchmark"),
                                     gridPos=get_grid_pos(30, 24, 0, 26),
Christoph Alt's avatar
Christoph Alt committed
                                     format='s',
Christoph Alt's avatar
Christoph Alt committed
                                     alias="$tag_name")
    return build_dashboard(options,
                           panels=[cpu_list, gpu_list, panel_build, panel_benchmark],
Christoph Alt's avatar
Christoph Alt committed
                           templating=[host_var])