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

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_annotation)
from dashboards.influx_queries import (Query, get_variable_condition,
                                       join_conditions, join_variable_and,
                                       show_tag_values)
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}',
Christoph Alt's avatar
Christoph Alt committed
        description=
        f"Benchmark dashboard for the Uniform Grid {arch} Benchmark from walberla",
        tags=[arch, 'benchmark', 'walberla', 'Uniform Grid'],
Christoph Alt's avatar
Christoph Alt committed
        timezone="browser",
    )
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])
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',
Christoph Alt's avatar
Christoph Alt committed
        description=
        "Benchmark dashboard for the Granular Gas Benchmark from walberla",
        tags=['CPU', 'benchmark', 'walberla', 'Granular Gas'],
Christoph Alt's avatar
Christoph Alt committed
        timezone="browser",
    )
Christoph Alt's avatar
Christoph Alt committed
    return build_row_repeat_dashboard(options, row_repeat_var,
                                      panel_repeat_var, dataSource,
                                      measurment_name, query, unit)
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',
Christoph Alt's avatar
Christoph Alt committed
        description=
        "Benchmark dashboard for the Phasefield Allen Cahn Benchmark from walberla",
        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')
Christoph Alt's avatar
Christoph Alt committed
    dashboard = build_row_repeat_dashboard(options, row_repeat_var,
                                           panel_repeat_var, dataSource,
                                           measurment_name, query, unit)
    dashboard.rows = [
        pack_in_row("Power Consumption", panel_power), *dashboard.rows
    ]
    annotation_query = "SELECT \"commit\" from( SELECT first(\"mlupsPerProcess\") FROM \"PhaseFieldAllenCahn\" WHERE host =~ /^$host$/ AND $timeFilter GROUP BY \"commit\" )"
    dashboard.annotations = get_annotation("InfluxDB-1", "red", "commits",
                                           annotation_query)
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',
Christoph Alt's avatar
Christoph Alt committed
        description=
        "Benchmark dashboard for the Phasefield Allen Cahn Benchmark from walberla",
        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"
                  ])

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


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",
    )

    panel_build = get_stat_panel("Build Times",
                                 dataSource,
                                 get_query("build"),
                                 gridPos=get_grid_pos(12, 24, 0, 0),
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, 13),
Christoph Alt's avatar
Christoph Alt committed
                                     format='s',
Christoph Alt's avatar
Christoph Alt committed
                                     alias="$tag_name")
    return build_dashboard(options,
                           panels=[panel_build, panel_benchmark],
                           templating=[host_var])