Enabling Standalone GUI on 2.x (#214)
* Initial overhaul of Analyze mode. Basic CLI is enabled.
Signed-off-by: colramos-amd <colramos@amd.com>
* Merge branch '2.x' of github.com:AMDResearch/omniperf into 2.x-dev
Signed-off-by: colramos-amd <colramos@amd.com>
* fix comment typo
Signed-off-by: Karl W Schulz <karl.schulz@amd.com>
* Move error logging to util.py
Signed-off-by: colramos-amd <colramos@amd.com>
* Move perfmon_configs dir into omniperf_soc dir. Rename config dirs for clarity
Signed-off-by: colramos-amd <colramos@amd.com>
* Add a supported_archs property to Omniperf base class
Signed-off-by: colramos-amd <colramos@amd.com>
* Add css assets for GUI styling
Signed-off-by: colramos-amd <colramos@amd.com>
* Re-organize roofline class. Improved useability
Signed-off-by: colramos-amd <colramos@amd.com>
* Enable standalone GUI
Signed-off-by: colramos-amd <colramos@amd.com>
* Remove outdated metric_configs. This was moved to omniperf_soc dir
Signed-off-by: colramos-amd <colramos@amd.com>
* Fix small bug in GUI to enable Mi100 visualization
Signed-off-by: colramos-amd <colramos@amd.com>
---------
Signed-off-by: colramos-amd <colramos@amd.com>
Signed-off-by: Karl W Schulz <karl.schulz@amd.com>
Signed-off-by: Cole Ramos <colramos@amd.com>
Co-authored-by: Karl W Schulz <karl.schulz@amd.com>
[ROCm/rocprofiler-compute commit: 7d93a086c2]
Этот коммит содержится в:
1 родитель
4719fa0e3b
Коммит
c73bd2bf91
165 files changed
+37024
-14772
No files matched your search
@@ -0,0 +1,341 @@
|
||||
##############################################################################bl
|
||||
# MIT License
|
||||
#
|
||||
# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
##############################################################################el
|
||||
|
||||
from dash import html, dcc
|
||||
import dash_bootstrap_components as dbc
|
||||
|
||||
from utils import schema
|
||||
|
||||
avail_normalizations = ["per_wave", "per_cycle", "per_second", "per_kernel"]
|
||||
|
||||
|
||||
# List all the unique column values for desired column in df, 'target_col'
|
||||
def list_unique(orig_list, is_numeric):
|
||||
list_set = set(orig_list)
|
||||
unique_list = list(list_set)
|
||||
if is_numeric:
|
||||
unique_list.sort()
|
||||
return unique_list
|
||||
|
||||
|
||||
def create_span(input):
|
||||
elmt = {}
|
||||
elmt["label"] = (html.Span(str(input), title=str(input)),)
|
||||
elmt["value"] = str(input)
|
||||
return elmt
|
||||
|
||||
|
||||
def get_header(raw_pmc, input_filters, kernel_names):
|
||||
return html.Header(
|
||||
id="home",
|
||||
children=[
|
||||
html.Nav(
|
||||
id="nav-wrap",
|
||||
children=[
|
||||
html.Ul(
|
||||
id="nav",
|
||||
children=[
|
||||
html.Div(
|
||||
className="nav-left",
|
||||
children=[
|
||||
dbc.DropdownMenu(
|
||||
[
|
||||
dbc.DropdownMenuItem("Overview", header=True),
|
||||
dbc.DropdownMenuItem(
|
||||
"Roofline",
|
||||
href="#roofline",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Top Stat",
|
||||
href="#top_stat",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"System Info",
|
||||
href="#system_info",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"System Speed-of-Light",
|
||||
href="#system_speed-of-light",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem("Compute", header=True),
|
||||
dbc.DropdownMenuItem(
|
||||
"Command Processor (CPF/CPC)",
|
||||
href="#command_processor_cpccpf",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Shader Processor Input (SPI)",
|
||||
href="#shader_processor_input_spi",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Wavefront",
|
||||
href="#wavefront",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Compute Units - Instruction Mix",
|
||||
href="#compute_units_-_instruction_mix",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Compute Units - Compute Pipeline",
|
||||
href="#compute_units_-_compute_pipeline",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem("Cache", header=True),
|
||||
dbc.DropdownMenuItem(
|
||||
"Local Data Share (LDS)",
|
||||
href="#local_data_share_lds",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Instruction Cache",
|
||||
href="#instruction_cache",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Scalar L1 Data Cache",
|
||||
href="#scalar_l1_data_cache",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Texture Addresser & Texture Data (TA/TD)",
|
||||
href="#texture_addresser_and_texture_data_tatd",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"Vector L1 Data Cache",
|
||||
href="#vector_l1_data_cache",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"L2 Cache",
|
||||
href="#l2_cache",
|
||||
external_link=True,
|
||||
),
|
||||
dbc.DropdownMenuItem(
|
||||
"L2 Cache (per channel)",
|
||||
href="#l2_cache_per_channel",
|
||||
external_link=True,
|
||||
),
|
||||
],
|
||||
label="Menu",
|
||||
menu_variant="dark",
|
||||
),
|
||||
],
|
||||
),
|
||||
html.Li(
|
||||
className="filter",
|
||||
children=[
|
||||
html.Div(
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
children=["Normalization:"],
|
||||
),
|
||||
dcc.Dropdown(
|
||||
avail_normalizations,
|
||||
id="norm-filt",
|
||||
value=input_filters["normalization"],
|
||||
clearable=False,
|
||||
style={"width": "150px"},
|
||||
),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Li(
|
||||
className="filter",
|
||||
children=[
|
||||
html.Div(
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
children=["GCD:"],
|
||||
),
|
||||
dcc.Dropdown(
|
||||
list_unique(
|
||||
list(
|
||||
map(
|
||||
str,
|
||||
raw_pmc[
|
||||
schema.pmc_perf_file_prefix
|
||||
]["gpu-id"],
|
||||
)
|
||||
),
|
||||
True,
|
||||
), # list avail gcd ids
|
||||
id="gcd-filt",
|
||||
multi=True,
|
||||
value=input_filters[
|
||||
"gpu"
|
||||
], # default to any gpu filters passed as args
|
||||
placeholder="ALL",
|
||||
clearable=False,
|
||||
style={"width": "60px"},
|
||||
),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Li(
|
||||
className="filter",
|
||||
children=[
|
||||
html.Div(
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
children=["Dispatch Filter:"],
|
||||
),
|
||||
dcc.Dropdown(
|
||||
list(
|
||||
map(
|
||||
str,
|
||||
raw_pmc[
|
||||
schema.pmc_perf_file_prefix
|
||||
]["Index"],
|
||||
)
|
||||
),
|
||||
id="disp-filt",
|
||||
multi=True,
|
||||
value=input_filters[
|
||||
"dispatch"
|
||||
], # default to any dispatch filters passed as args
|
||||
placeholder="ALL",
|
||||
style={"width": "150px"},
|
||||
),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Li(
|
||||
className="filter",
|
||||
children=[
|
||||
html.Div(
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
children=["Top N:"],
|
||||
),
|
||||
dcc.Dropdown(
|
||||
[1, 5, 10, 15, 20, 50, 100],
|
||||
id="top-n-filt",
|
||||
value=input_filters[
|
||||
"top_n"
|
||||
], # default to any dispatch filters passed as args
|
||||
clearable=False,
|
||||
style={"width": "50px"},
|
||||
),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Li(
|
||||
className="filter",
|
||||
children=[
|
||||
html.Div(
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
children=["Kernels:"],
|
||||
),
|
||||
dcc.Dropdown(
|
||||
list(
|
||||
map(
|
||||
create_span,
|
||||
list_unique(
|
||||
list(
|
||||
map(
|
||||
str,
|
||||
raw_pmc[
|
||||
schema.pmc_perf_file_prefix
|
||||
]["KernelName"],
|
||||
)
|
||||
),
|
||||
False,
|
||||
), # list avail kernel names
|
||||
)
|
||||
),
|
||||
id="kernel-filt",
|
||||
multi=True,
|
||||
value=kernel_names,
|
||||
optionHeight=150,
|
||||
placeholder="ALL",
|
||||
style={
|
||||
"width": "600px", # TODO: Change these widths to % rather than fixed value
|
||||
},
|
||||
),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Div(
|
||||
className="nav-right",
|
||||
children=[
|
||||
html.Li(
|
||||
children=[
|
||||
# Report bug button
|
||||
html.A(
|
||||
href="",
|
||||
children=[
|
||||
html.Button(
|
||||
className="report",
|
||||
children=["Report Bug"],
|
||||
)
|
||||
],
|
||||
)
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
html.Div(
|
||||
className="row banner",
|
||||
children=[
|
||||
html.H3(
|
||||
children=["Placeholder. Guided Analysis coming soon..."],
|
||||
style={"color": "white"},
|
||||
),
|
||||
],
|
||||
),
|
||||
html.P(
|
||||
className="scrolldown",
|
||||
children=[
|
||||
html.A(
|
||||
className="smoothscroll",
|
||||
href="#roofline",
|
||||
children=[html.I(className="icon-down-circle")],
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user