2020-03-24 22:01:34 -05:00
|
|
|
################################################################################
|
|
|
|
|
# Copyright (c) 2018 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.
|
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
|
|
import os, sys, re
|
|
|
|
|
|
2023-08-21 15:08:31 +00:00
|
|
|
|
2020-03-24 22:01:34 -05:00
|
|
|
# gen_params() takes a text file like the output of rocminfo cmd and parses it into a map {key,value}
|
|
|
|
|
# where key is the param and value is the value of this param
|
|
|
|
|
# for example: Threadmodel : "posix"
|
|
|
|
|
# it also processes encompasing sections to generate a full param name such as (section names separated by '_'):
|
|
|
|
|
# "Agent2_PoolInfo_ISAInfo_ISA1_WorkgroupMaxSizeperDimension_x": "1024(0x400)",
|
|
|
|
|
def gen_params(txtfile):
|
2023-08-21 15:08:31 +00:00
|
|
|
fields = {}
|
|
|
|
|
counter = 0
|
|
|
|
|
parent_field = ""
|
|
|
|
|
nbr_indent = 0
|
|
|
|
|
nbr_indent_prev = 0
|
|
|
|
|
check_for_dims = False
|
|
|
|
|
with open(txtfile) as fp:
|
|
|
|
|
for line in fp:
|
|
|
|
|
me = re.match(r"\*\*\* Done \*\*\*", line) # Marks the end of cmd
|
|
|
|
|
if me:
|
|
|
|
|
parent_field = ""
|
|
|
|
|
nbr_indent = 0
|
|
|
|
|
nbr_indent_prev = 0
|
|
|
|
|
check_for_dims = False
|
|
|
|
|
continue
|
|
|
|
|
mv = re.match(
|
|
|
|
|
r"HCC clang version\s+(.*)", line
|
|
|
|
|
) # outlier: only line with a version number and no ':', special case
|
|
|
|
|
if mv:
|
|
|
|
|
key = "HCCclangversion"
|
|
|
|
|
val = mv.group(1)
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
fields[(counter, key)] = val
|
|
|
|
|
continue
|
|
|
|
|
# Variable 'check_for_dims' is True for text like this:
|
|
|
|
|
# Workgroup Max Size per Dimension:
|
|
|
|
|
# x 1024(0x400)
|
|
|
|
|
# y 1024(0x400)
|
|
|
|
|
# z 1024(0x400)
|
|
|
|
|
if check_for_dims == True:
|
|
|
|
|
mc = re.match(r"\s*([x|y|z])\s+(.*)", line)
|
|
|
|
|
if mc:
|
|
|
|
|
key_sav = mc.group(1)
|
|
|
|
|
if parent_field != "":
|
|
|
|
|
key = parent_field + "." + mc.group(1)
|
|
|
|
|
else:
|
|
|
|
|
key = mc.group(1)
|
|
|
|
|
val = re.sub(r"\s+", "", mc.group(2))
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
fields[(counter, key)] = val
|
|
|
|
|
if key_sav == "z":
|
|
|
|
|
check_for_dims = False
|
|
|
|
|
nbr_indent_prev = nbr_indent
|
|
|
|
|
mi = re.search(r"^(\s+)\w+.*", line)
|
|
|
|
|
md = re.search(":", line)
|
|
|
|
|
if mi:
|
|
|
|
|
nbr_indent = int(len(mi.group(1)) / 2) # indentation cnt
|
|
|
|
|
else:
|
|
|
|
|
if not md:
|
|
|
|
|
tmp = re.sub(r"\s+", "", line)
|
|
|
|
|
if tmp.isalnum():
|
|
|
|
|
parent_field = tmp
|
2020-03-24 22:01:34 -05:00
|
|
|
|
2023-08-21 15:08:31 +00:00
|
|
|
if nbr_indent < nbr_indent_prev:
|
|
|
|
|
go_back_parent = nbr_indent_prev - nbr_indent
|
|
|
|
|
for i in range(go_back_parent): # decrease as many levels up as needed
|
|
|
|
|
pos = parent_field.rfind(".")
|
|
|
|
|
if pos != -1:
|
|
|
|
|
parent_field = parent_field[:pos]
|
|
|
|
|
# Process lines such as :
|
|
|
|
|
# Segment: GLOBAL; FLAGS: KERNARG, FINE GRAINED
|
|
|
|
|
# Size: 131897644(0x7dc992c) KB
|
|
|
|
|
for lin in line.split(";"):
|
|
|
|
|
lin = re.sub(r"\s+", "", lin)
|
|
|
|
|
m = re.match(r"(.*):(.*)", lin)
|
|
|
|
|
if m:
|
|
|
|
|
key, val = m.group(1), m.group(2)
|
|
|
|
|
if parent_field != "":
|
|
|
|
|
key = parent_field + "." + key
|
|
|
|
|
if val == "":
|
|
|
|
|
mk = re.match(r".*Dimension", key)
|
|
|
|
|
if mk: # expect x,y,z on next 3 lines
|
|
|
|
|
check_for_dims = True
|
|
|
|
|
parent_field = key
|
|
|
|
|
else:
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
fields[(counter, key)] = val
|
|
|
|
|
else:
|
|
|
|
|
if nbr_indent != nbr_indent_prev and not check_for_dims:
|
|
|
|
|
parent_field = parent_field + "." + lin.replace(":", "")
|
2020-03-24 22:01:34 -05:00
|
|
|
|
2023-08-21 15:08:31 +00:00
|
|
|
return fields
|