From e34b5b08a0be13fef12912a1b42acacea0314392 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 20 Mar 2023 13:52:42 -0500 Subject: [PATCH 01/10] Hide roofline section in GUI if --no-roof is used Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: 090d74d7e8a195d7d10059250890861ca773de97] --- .../src/omniperf_analyze/utils/gui.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py index eb083bfe9d..8c859f3fa6 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py @@ -25,6 +25,7 @@ from selectors import EpollSelector import sys import copy +import os.path import pandas as pd from dash.dash_table import FormatTemplate from dash.dash_table.Format import Format, Scheme, Symbol @@ -466,13 +467,15 @@ def build_layout( get_memchart(panel_configs[1900]["data source"], base_data[base_run]) ) # append roofline section - div_children.append( - get_roofline( - path_to_dir, - parser.apply_filters(base_data[base_run], is_gui, debug), - verbose, + has_roofline = os.path.isfile(path_to_dir + "/roofline.csv") + if (has_roofline): + div_children.append( + get_roofline( + path_to_dir, + parser.apply_filters(base_data[base_run], is_gui, debug), + verbose, + ) ) - ) # Iterate over each section as defined in panel configs for panel_id, panel in panel_configs.items(): title = str(panel_id // 100) + ". " + panel["title"] From e2b1988230e250727b554f24cb1b393731d2afc4 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 20 Mar 2023 17:06:13 -0500 Subject: [PATCH 02/10] Add popup for low level metrics (#101) Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: e2eaebe4835b54ff1f1bb33ba20ab3182e80380e] --- .../src/omniperf_analyze/assets/layout.css | 12 ++++++++++++ .../src/omniperf_analyze/utils/gui.py | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css b/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css index b723d236a3..53c38fc9c4 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css +++ b/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css @@ -396,6 +396,18 @@ button.report:hover { #memchart a, #memchart a:visited { color: #fff; } #memchart a:hover, #memchart a:focus { color: #11ABB0; } +/* ------------------------------------------------------------------ */ +/* Popup Section +/* ------------------------------------------------------------------ */ +#popup{ + text-align: center; + border: 3px solid #F06000; + margin: auto; + width: 50%; + padding: 10px; + color: white; +} + /* ------------------------------------------------------------------ */ /* Top Stat Section /* ------------------------------------------------------------------ */ diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py index 8c859f3fa6..76886f5815 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py @@ -468,7 +468,7 @@ def build_layout( ) # append roofline section has_roofline = os.path.isfile(path_to_dir + "/roofline.csv") - if (has_roofline): + if has_roofline: div_children.append( get_roofline( path_to_dir, @@ -593,4 +593,17 @@ def build_layout( ) ) + # Display pop-up message if no filters are applied + if not (disp_filt or kernel_filter or gcd_filter): + div_children.append( + html.Section( + id="popup", + children=[ + html.Div( + children="To dive deeper, use the top drop down menus to isolate particular kernel(s) or dispatch(s). You will then see the web page update with additional low-level metrics specific to the filter you've applied..", + ), + ], + ) + ) + return div_children From aa9a4a66737e13f1ee768a1d2b00aba63c25d160 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 21 Mar 2023 11:41:13 -0500 Subject: [PATCH 03/10] Wrap text in Flask GUI tables fixing long kernelNames Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: a9742915b51d6e42093d90aeebbcc4c38ec7aac3] --- .../rocprofiler-compute/src/omniperf_analyze/utils/gui.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py index 76886f5815..d3b7a0c4e5 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py @@ -343,6 +343,8 @@ def build_table_chart( style_cell_conditional=[ {"if": {"column_id": display_columns[0]}, "textAlign": "left"} ], + # style cell + style_cell={"maxWidth": "500px"}, # display style style_header={ "backgroundColor": "rgb(30, 30, 30)", @@ -351,7 +353,7 @@ def build_table_chart( } if IS_DARK else {}, - style_data={"backgroundColor": "rgb(50, 50, 50)", "color": "white"} + style_data={"backgroundColor": "rgb(50, 50, 50)", "color": "white", "whiteSpace": "normal", "height": "auto"} if IS_DARK else {}, style_data_conditional=[ From 0362c63ec9d03e078d09e8ebde5ff327f893fb77 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Wed, 22 Mar 2023 15:26:28 -0500 Subject: [PATCH 04/10] Add span tag to kernelName dropdown. Improve readability (#102) Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: a56bd24dbf6256d6085c1069e3d2573458685def] --- .../src/omniperf_analyze/assets/layout.css | 5 +- .../src/omniperf_analyze/utils/gui.py | 2 +- .../utils/gui_components/header.py | 81 +++++++++++-------- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css b/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css index 53c38fc9c4..4fcaad24ed 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css +++ b/projects/rocprofiler-compute/src/omniperf_analyze/assets/layout.css @@ -213,7 +213,9 @@ ul#nav li { font-size: 14px; text-align: left; } - +.VirtualizedSelectOption { + overflow: hidden; +} #nav .nav-right { float: right; } @@ -246,6 +248,7 @@ button.report:hover { font-size: 16px; } +/* Menu Button */ .dropdown button { display: inline-block; font: 16px 'opensans-bold', sans-serif; diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py index d3b7a0c4e5..a5b9335209 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py @@ -602,7 +602,7 @@ def build_layout( id="popup", children=[ html.Div( - children="To dive deeper, use the top drop down menus to isolate particular kernel(s) or dispatch(s). You will then see the web page update with additional low-level metrics specific to the filter you've applied..", + children="To dive deeper, use the top drop down menus to isolate particular kernel(s) or dispatch(s). You will then see the web page update with additional low-level metrics specific to the filter you've applied.", ), ], ) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py index dbb89982a2..5210a02c0c 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py @@ -38,6 +38,14 @@ def list_unique(orig_list, 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( @@ -163,40 +171,6 @@ def get_header(raw_pmc, input_filters, kernel_names): ) ], ), - html.Li( - className="filter", - children=[ - html.Div( - children=[ - html.A( - className="smoothscroll", - children=["Kernels:"], - ), - dcc.Dropdown( - 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, - placeholder="ALL", - style={ - "width": "600px", # TODO: Change these widths to % rather than fixed value - "height": "34px", - }, - ), - ] - ) - ], - ), html.Li( className="filter", children=[ @@ -261,6 +235,45 @@ def get_header(raw_pmc, input_filters, kernel_names): ) ], ), + 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=[ From 25424faa9e11f0c004a03cdc7d1df3e55f3826b2 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Thu, 23 Mar 2023 12:54:00 -0500 Subject: [PATCH 05/10] Conform to Python formatting Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: 644b20e3085f206089e08ab6bbd94cf0ecd4acf5] --- .../rocprofiler-compute/src/omniperf_analyze/utils/gui.py | 7 ++++++- .../src/omniperf_analyze/utils/gui_components/header.py | 7 +++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py index a5b9335209..25e908ce45 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui.py @@ -353,7 +353,12 @@ def build_table_chart( } if IS_DARK else {}, - style_data={"backgroundColor": "rgb(50, 50, 50)", "color": "white", "whiteSpace": "normal", "height": "auto"} + style_data={ + "backgroundColor": "rgb(50, 50, 50)", + "color": "white", + "whiteSpace": "normal", + "height": "auto", + } if IS_DARK else {}, style_data_conditional=[ diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py index 5210a02c0c..6723a26c43 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/header.py @@ -38,15 +38,14 @@ def list_unique(orig_list, is_numeric): unique_list.sort() return unique_list + def create_span(input): elmt = {} - elmt["label"] = html.Span( - str(input), - title=str(input) - ), + 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", From 60725b2c7f89f207277e28d65391dd413eecc6ca Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Wed, 5 Apr 2023 14:28:19 -0500 Subject: [PATCH 06/10] Add log.txt file to workload output (#106) Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: 6050cdd924581eeffebf320541d957b797fbb303] --- projects/rocprofiler-compute/src/omniperf | 81 ++++++++++++++++++++--- 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf b/projects/rocprofiler-compute/src/omniperf index 72839cf0a1..917994323d 100755 --- a/projects/rocprofiler-compute/src/omniperf +++ b/projects/rocprofiler-compute/src/omniperf @@ -26,6 +26,8 @@ import sys import os +import io +import selectors import argparse import subprocess import glob @@ -57,6 +59,48 @@ from common import getVersion def run_subprocess(cmd): subprocess.run(cmd, check=True) +def capture_subprocess_output(subprocess_args): + # Start subprocess + # bufsize = 1 means output is line buffered + # universal_newlines = True is required for line buffering + process = subprocess.Popen(subprocess_args, + bufsize=1, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True) + + # Create callback function for process output + buf = io.StringIO() + def handle_output(stream, mask): + # Because the process' output is line buffered, there's only ever one + # line to read when this function is called + line = stream.readline() + buf.write(line) + sys.stdout.write(line) + + # Register callback for an "available for read" event from subprocess' stdout stream + selector = selectors.DefaultSelector() + selector.register(process.stdout, selectors.EVENT_READ, handle_output) + + # Loop until subprocess is terminated + while process.poll() is None: + # Wait for events and handle them with their registered callbacks + events = selector.select() + for key, mask in events: + callback = key.data + callback(key.fileobj, mask) + + # Get process return code + return_code = process.wait() + selector.close() + + success = (return_code == 0) + + # Store buffered output + output = buf.getvalue() + buf.close() + + return (success, output) def resolve_rocprof(): # ROCPROF INFO @@ -337,16 +381,20 @@ def characterize_app(args, VER): print("Target: ", args.target) print("Command: ", args.remaining) print("Kernel Selection: ", args.kernel) - print("Dispatch Selection: ", args.dispatch, "\n") + print("Dispatch Selection: ", args.dispatch) perfmon_dir = str(OMNIPERF_HOME) + "/perfmon_pub" print("permon dir is ", os.path.abspath(perfmon_dir)) app_cmd = args.remaining - workload_dir =args.path + workload_dir = args.path # Perfmon filtering pmc_filter(workload_dir, perfmon_dir, args.target) + # Set up a log file + log = open(workload_dir + "/log.txt", "w") + print("Log: ", workload_dir + "/log.txt\n") + # Workload profiling for fname in glob.glob(workload_dir + "/perfmon/*.txt"): # Kernel filtering (in-place replacement) @@ -376,7 +424,11 @@ def characterize_app(args, VER): if args.use_rocscope == True: run_rocscope(args, fname) else: - run_prof(fname, workload_dir, perfmon_dir, app_cmd, args.target, args.verbose) + run_prof(fname, workload_dir, perfmon_dir, app_cmd, args.target, log, args.verbose) + + # Close log + log.close() + # run again with timestamps run_subprocess( [ @@ -398,7 +450,6 @@ def characterize_app(args, VER): # Profiling Helpers ################################################ - def run_rocscope(args, fname): # profile the app if args.use_rocscope == True: @@ -428,7 +479,7 @@ def run_rocscope(args, fname): sys.exit(1) -def run_prof(fname, workload_dir, perfmon_dir, cmd, target, verbose): +def run_prof(fname, workload_dir, perfmon_dir, cmd, target, log_file, verbose): global rocprof_cmd fbase = os.path.splitext(os.path.basename(fname))[0] @@ -439,7 +490,7 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, target, verbose): # profile the app (run w/ custom config files for mi100) if target == "mi100": print("RUNNING WITH CUSTOM METRICS") - run_subprocess( + success, output = capture_subprocess_output( [ rocprof_cmd, "-i", @@ -454,7 +505,7 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, target, verbose): ] ) else: - run_subprocess( + success, output = capture_subprocess_output( [ rocprof_cmd, "-i", @@ -466,6 +517,9 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, target, verbose): '"' + cmd + '"', ] ) + # Write output to log + log_file.write(output) + def omniperf_profile(args, VER): @@ -482,9 +536,9 @@ def omniperf_profile(args, VER): print("Dispatch Selection: ", args.dispatch) if args.ipblocks == None: - print("IP Blocks: All", "\n") + print("IP Blocks: All") else: - print("IP Blocks: ", args.ipblocks, "\n") + print("IP Blocks: ", args.ipblocks) # Set up directories workload_dir = args.path + "/" + args.name + "/" + args.target @@ -493,6 +547,10 @@ def omniperf_profile(args, VER): # Perfmon filtering perfmon_filter(workload_dir, perfmon_dir, args) + # Set up a log file + log = open(workload_dir + "/log.txt", "w") + print("Log: ", workload_dir + "/log.txt\n") + if not args.lucky == None and args.lucky == True: print("You're feeling lucky - only profiling top N kernels") # look for whether workload_dir exists - create if not @@ -591,7 +649,7 @@ def omniperf_profile(args, VER): if args.use_rocscope == True: run_rocscope(args, fname) else: - run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.target, args.verbose) + run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.target, log, args.verbose) # run again with timestamps run_subprocess( @@ -606,7 +664,6 @@ def omniperf_profile(args, VER): '"' + args.remaining + '"', ] ) - # Update pmc_perf.csv timestamps replace_timestamps(workload_dir) @@ -648,6 +705,8 @@ def omniperf_profile(args, VER): str(args.device), ] ) + # Close log + log.close() ################################################ From 38ea503518364caead1067bbb1c2d9dd870ef22d Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 10 Apr 2023 15:03:32 -0500 Subject: [PATCH 07/10] Fix typo in LDS section (#107) Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: c6912708d5b0a4c81b421cbc4e90592d0bcc3007] --- .../src/omniperf_analyze/configs/gfx906/1200_lds.yaml | 2 +- .../src/omniperf_analyze/configs/gfx908/1200_lds.yaml | 2 +- .../src/omniperf_analyze/configs/gfx90a/1200_lds.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx906/1200_lds.yaml b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx906/1200_lds.yaml index dc39db11df..253b2fc230 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx906/1200_lds.yaml +++ b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx906/1200_lds.yaml @@ -22,7 +22,7 @@ Panel Config: Access Rate: value: AVG(((200 * SQ_ACTIVE_INST_LDS) / (GRBM_GUI_ACTIVE * $numCU))) tips: - Bandwith (Pct-of-Peak): + Bandwidth (Pct-of-Peak): value: AVG((((((SQ_LDS_IDX_ACTIVE - SQ_LDS_BANK_CONFLICT) * 4) * TO_INT($L2Banks)) / (EndNs - BeginNs)) / (($sclk * $numCU) * 0.00128))) tips: diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx908/1200_lds.yaml b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx908/1200_lds.yaml index dc39db11df..253b2fc230 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx908/1200_lds.yaml +++ b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx908/1200_lds.yaml @@ -22,7 +22,7 @@ Panel Config: Access Rate: value: AVG(((200 * SQ_ACTIVE_INST_LDS) / (GRBM_GUI_ACTIVE * $numCU))) tips: - Bandwith (Pct-of-Peak): + Bandwidth (Pct-of-Peak): value: AVG((((((SQ_LDS_IDX_ACTIVE - SQ_LDS_BANK_CONFLICT) * 4) * TO_INT($L2Banks)) / (EndNs - BeginNs)) / (($sclk * $numCU) * 0.00128))) tips: diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx90a/1200_lds.yaml b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx90a/1200_lds.yaml index dc39db11df..253b2fc230 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx90a/1200_lds.yaml +++ b/projects/rocprofiler-compute/src/omniperf_analyze/configs/gfx90a/1200_lds.yaml @@ -22,7 +22,7 @@ Panel Config: Access Rate: value: AVG(((200 * SQ_ACTIVE_INST_LDS) / (GRBM_GUI_ACTIVE * $numCU))) tips: - Bandwith (Pct-of-Peak): + Bandwidth (Pct-of-Peak): value: AVG((((((SQ_LDS_IDX_ACTIVE - SQ_LDS_BANK_CONFLICT) * 4) * TO_INT($L2Banks)) / (EndNs - BeginNs)) / (($sclk * $numCU) * 0.00128))) tips: From c89b9e1808d2974fe4ec06c106e9f96e2f7d99a6 Mon Sep 17 00:00:00 2001 From: colramos Date: Tue, 11 Apr 2023 17:31:37 -0500 Subject: [PATCH 08/10] Fix filename in standalone roofline mode Signed-off-by: colramos [ROCm/rocprofiler-compute commit: 1faa19b247f56b2eda6ed7058f2401bdfd73f6e8] --- .../src/omniperf_analyze/utils/gui_components/roofline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/roofline.py b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/roofline.py index 0d9e5826b3..429d613f04 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/utils/gui_components/roofline.py @@ -235,7 +235,7 @@ def get_roofline( fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) ml_combo_fig.write_image( - path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id) + path_to_dir + "/empirRoof_gpu-{}_int8_fp16.pdf".format(dev_id) ) if kernel_names: # only save a legend if kernel_names option is toggled @@ -244,7 +244,7 @@ def get_roofline( # Re-save to remove loading MathJax pop up fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) ml_combo_fig.write_image( - path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id) + path_to_dir + "/empirRoof_gpu-{}_int8_fp16.pdf".format(dev_id) ) if kernel_names: legend.write_image(path_to_dir + "/kernelName_legend.pdf") From 38442c0dafe37c95ca258ebe496964b93a1c0af5 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 14 Apr 2023 11:32:57 -0500 Subject: [PATCH 09/10] Add containers for each supported Linux distro Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: f6d92331137fc6a2646af4e55931c25414a0a37c] --- .../rocprofiler-compute/docker/rhel8/Dockerfile | 14 ++++++++++++++ .../rocprofiler-compute/docker/rhel8/rocm.repo | 13 +++++++++++++ .../docker/sle15sp3/Dockerfile | 12 ++++++++++++ .../docker/sle15sp3/amdgpu.repo | 13 +++++++++++++ .../docker/ubuntu20.04/Dockerfile | 15 +++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 projects/rocprofiler-compute/docker/rhel8/Dockerfile create mode 100644 projects/rocprofiler-compute/docker/rhel8/rocm.repo create mode 100644 projects/rocprofiler-compute/docker/sle15sp3/Dockerfile create mode 100644 projects/rocprofiler-compute/docker/sle15sp3/amdgpu.repo create mode 100644 projects/rocprofiler-compute/docker/ubuntu20.04/Dockerfile diff --git a/projects/rocprofiler-compute/docker/rhel8/Dockerfile b/projects/rocprofiler-compute/docker/rhel8/Dockerfile new file mode 100644 index 0000000000..70afcb13cb --- /dev/null +++ b/projects/rocprofiler-compute/docker/rhel8/Dockerfile @@ -0,0 +1,14 @@ +FROM --platform=linux/amd64 rockylinux:8 + +RUN yum -y install epel-release +RUN yum -y install dnf-plugins-core +RUN yum -y install cmake +RUN yum -y install gcc-c++ +RUN yum -y install python39 + +# Enable rocm package repo +COPY rocm.repo /etc/yum.repos.d +RUN yum config-manager --set-enabled powertools + +# Desired ROCm packages +RUN yum -y install rocm-dev5.1.3 \ No newline at end of file diff --git a/projects/rocprofiler-compute/docker/rhel8/rocm.repo b/projects/rocprofiler-compute/docker/rhel8/rocm.repo new file mode 100644 index 0000000000..17171d755d --- /dev/null +++ b/projects/rocprofiler-compute/docker/rhel8/rocm.repo @@ -0,0 +1,13 @@ +[ROCm-5.1.3] +name=ROCm5.1.3 +baseurl=https://repo.radeon.com/rocm/centos8/5.1.3/main +enabled=1 +gpgcheck=1 +gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key + +[amdgpu] +name=amdgpu +baseurl=https://repo.radeon.com/amdgpu/latest/rhel/8.5/main/x86_64 +enabled=1 +gpgcheck=1 +gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key \ No newline at end of file diff --git a/projects/rocprofiler-compute/docker/sle15sp3/Dockerfile b/projects/rocprofiler-compute/docker/sle15sp3/Dockerfile new file mode 100644 index 0000000000..a4e430052e --- /dev/null +++ b/projects/rocprofiler-compute/docker/sle15sp3/Dockerfile @@ -0,0 +1,12 @@ +FROM --platform=linux/amd64 registry.suse.com/suse/sle15:15.3 + +RUN zypper -n --gpg-auto-import-keys addrepo https://download.opensuse.org/repositories/devel:/languages:/perl/SLE_15_SP3/devel:languages:perl.repo + +COPY amdgpu.repo /etc/zypp/repos.d/amdgpu.repo + +RUN zypper -n --gpg-auto-import-keys install rocm-dev5.1.3 + +RUN zypper -n install gcc-c++ && \ + zypper -n install make && \ + zypper -n install git + \ No newline at end of file diff --git a/projects/rocprofiler-compute/docker/sle15sp3/amdgpu.repo b/projects/rocprofiler-compute/docker/sle15sp3/amdgpu.repo new file mode 100644 index 0000000000..88eadf65c6 --- /dev/null +++ b/projects/rocprofiler-compute/docker/sle15sp3/amdgpu.repo @@ -0,0 +1,13 @@ +[ROCm-5.1.3] +name=ROCm5.1.3 +baseurl=https://repo.radeon.com/rocm/zyp/5.1.3/main +enabled=1 +gpgcheck=0 +gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key + +[amdgpu] +name=amdgpu +baseurl=https://repo.radeon.com/amdgpu/latest/sle/15.3/main/x86_64 +enabled=1 +gpgcheck=0 +gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key \ No newline at end of file diff --git a/projects/rocprofiler-compute/docker/ubuntu20.04/Dockerfile b/projects/rocprofiler-compute/docker/ubuntu20.04/Dockerfile new file mode 100644 index 0000000000..8e2582d9e4 --- /dev/null +++ b/projects/rocprofiler-compute/docker/ubuntu20.04/Dockerfile @@ -0,0 +1,15 @@ +FROM --platform=linux/amd64 ubuntu:20.04 +WORKDIR /home + +USER root + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ "US/Chicago" + +RUN apt-get update +RUN apt-get install -y wget +RUN wget https://repo.radeon.com/amdgpu-install/5.3/ubuntu/focal/amdgpu-install_5.3.50300-1_all.deb +RUN apt-get install -y ./amdgpu-install_5.3.50300-1_all.deb +RUN amdgpu-install --usecase=rocm -y --accept-eula + +RUN apt-get install -y build-essential \ No newline at end of file From b72787b3611f1cd6fe0faeb2f71ba9d6deb5c30c Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 14 Apr 2023 12:50:28 -0500 Subject: [PATCH 10/10] Roofline support for SLES15 SP3 and greater (#109) Signed-off-by: coleramos425 [ROCm/rocprofiler-compute commit: 77559a2f25c45c24c1589c1dff19a7d5d131ec3e] --- projects/rocprofiler-compute/src/omniperf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/rocprofiler-compute/src/omniperf b/projects/rocprofiler-compute/src/omniperf index 917994323d..f3388bdf42 100755 --- a/projects/rocprofiler-compute/src/omniperf +++ b/projects/rocprofiler-compute/src/omniperf @@ -326,9 +326,13 @@ def detect_roofline(): elif rhel_distro == "platform:el8": # Must be a valid RHEL machine distro = rhel_distro - elif sles_distro == "15.3": + elif ( + (type(sles_distro) == str and len(sles_distro) >= 3) and # confirm string and len + sles_distro[:2] == "15" and int(sles_distro[3]) >= 3 # SLES15 and SP >= 3 + ): # Must be a valid SLES machine - distro = sles_distro + # Use SP3 binary for all forward compatible service pack versions + distro = "15.3" elif ubuntu_distro == "20.04": # Must be a valid Ubuntu machine distro = ubuntu_distro