Add numPipes built-in-var for updated metrics
Co-authored-by: Nick Curtis <nicholas.curtis@amd.com>
Signed-off-by: colramos-amd <colramos@amd.com>
[ROCm/rocprofiler-compute commit: d16f58b797]
This commit is contained in:
committato da
Cole Ramos
parent
ef60d67744
commit
bd22355b96
@@ -31,6 +31,7 @@ SOC_PARAM = {
|
||||
"numSE": 4,
|
||||
"numCU": 60,
|
||||
"numSIMD": 240,
|
||||
"numPipes": 4,
|
||||
"numWavesPerCU": 40,
|
||||
"numSQC": 15,
|
||||
"L2Banks": 16,
|
||||
|
||||
@@ -31,6 +31,7 @@ SOC_PARAM = {
|
||||
"numSE": 8,
|
||||
"numCU": 120,
|
||||
"numSIMD": 480,
|
||||
"numPipes": 4,
|
||||
"numWavesPerCU": 40,
|
||||
"numSQC": 30,
|
||||
"L2Banks": 32,
|
||||
|
||||
@@ -33,6 +33,7 @@ SOC_PARAM = {
|
||||
"numSE": 8,
|
||||
"numCU": 110,
|
||||
"numSIMD": 440,
|
||||
"numPipes": 4,
|
||||
"numWavesPerCU": 32,
|
||||
"numSQC": 56,
|
||||
"L2Banks": 32,
|
||||
|
||||
@@ -116,6 +116,11 @@ def to_min(*args):
|
||||
def to_max(*args):
|
||||
if len(args) == 1 and isinstance(args[0], pd.core.series.Series):
|
||||
return args[0].max()
|
||||
elif len(args) == 2 and (
|
||||
isinstance(args[0], pd.core.series.Series)
|
||||
or isinstance(args[1], pd.core.series.Series)
|
||||
):
|
||||
return np.maximum(args[0], args[1])
|
||||
elif max(args) == None:
|
||||
return np.nan
|
||||
else:
|
||||
@@ -303,7 +308,7 @@ def build_eval_string(equation, coll_level):
|
||||
|
||||
def update_denom_string(equation, unit):
|
||||
"""
|
||||
Update $denom in equation with runtime nomorlization unit.
|
||||
Update $denom in equation with runtime normalization unit.
|
||||
"""
|
||||
if not equation:
|
||||
return ""
|
||||
@@ -318,7 +323,7 @@ def update_denom_string(equation, unit):
|
||||
|
||||
def update_normUnit_string(equation, unit):
|
||||
"""
|
||||
Update $normUnit in equation with runtime nomorlization unit.
|
||||
Update $normUnit in equation with runtime normalization unit.
|
||||
It is string replacement for display only.
|
||||
"""
|
||||
|
||||
@@ -327,8 +332,8 @@ def update_normUnit_string(equation, unit):
|
||||
return ""
|
||||
|
||||
return re.sub(
|
||||
"\((?P<PREFIX>\w*)\s+\+\s+(\$normUnit\))",
|
||||
"\g<PREFIX> " + re.sub("_", " ", unit),
|
||||
r"\((?P<PREFIX>\w*)\s+\+\s+(\$normUnit\))",
|
||||
r"\g<PREFIX> " + re.sub("_", " ", unit),
|
||||
str(equation),
|
||||
).capitalize()
|
||||
|
||||
@@ -690,9 +695,10 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug):
|
||||
# NB:
|
||||
# Following with Omniperf 0.2.0, we are using HW spec from sys_info instead.
|
||||
# The soc_spec is not in using right now, but can be used to do verification
|
||||
# aganist sys_info, forced theoretical evaluation, or supporting tool-chains
|
||||
# against sys_info, forced theoretical evaluation, or supporting tool-chains
|
||||
# broken.
|
||||
ammolite__numSE = sys_info.numSE
|
||||
ammolite__numPipes = sys_info.numPipes
|
||||
ammolite__numCU = sys_info.numCU
|
||||
ammolite__numSIMD = sys_info.numSIMD
|
||||
ammolite__numWavesPerCU = sys_info.maxWavesPerCU # todo: check do we still need it
|
||||
@@ -739,7 +745,7 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug):
|
||||
print("~" * 40 + "\nExpression:")
|
||||
print(expr, "=", row[expr])
|
||||
print("Inputs:")
|
||||
matched_vars = re.findall("ammolite__\w+", row[expr])
|
||||
matched_vars = re.findall(r"ammolite__\w+", row[expr])
|
||||
if matched_vars:
|
||||
for v in matched_vars:
|
||||
print(
|
||||
@@ -749,12 +755,12 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug):
|
||||
eval(compile(v, "<string>", "eval")),
|
||||
)
|
||||
matched_cols = re.findall(
|
||||
"raw_pmc_df\['\w+'\]\['\w+'\]", row[expr]
|
||||
r"raw_pmc_df\['\w+'\]\['\w+'\]", row[expr]
|
||||
)
|
||||
if matched_cols:
|
||||
for c in matched_cols:
|
||||
m = re.match(
|
||||
"raw_pmc_df\['(\w+)'\]\['(\w+)'\]", c
|
||||
r"raw_pmc_df\['(\w+)'\]\['(\w+)'\]", c
|
||||
)
|
||||
t = raw_pmc_df[m.group(1)][
|
||||
m.group(2)
|
||||
@@ -778,7 +784,7 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug):
|
||||
print("~" * 40)
|
||||
except TypeError:
|
||||
print(
|
||||
"skiping entry. Encounterd a missing counter"
|
||||
"skipping entry. Encounterd a missing counter"
|
||||
)
|
||||
print(expr, " has been assigned to None")
|
||||
print(np.nan)
|
||||
@@ -788,7 +794,7 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug):
|
||||
== "'NoneType' object has no attribute 'get'"
|
||||
):
|
||||
print(
|
||||
"skiping entry. Encounterd a missing csv"
|
||||
"skipping entry. Encounterd a missing csv"
|
||||
)
|
||||
print(np.nan)
|
||||
else:
|
||||
@@ -894,7 +900,7 @@ def apply_filters(workload, dir, is_gui, debug):
|
||||
print("{} is an invalid dispatch id.".format(d))
|
||||
sys.exit(1)
|
||||
if ">" in workload.filter_dispatch_ids[0]:
|
||||
m = re.match("\> (\d+)", workload.filter_dispatch_ids[0])
|
||||
m = re.match(r"\> (\d+)", workload.filter_dispatch_ids[0])
|
||||
ret_df = ret_df[
|
||||
ret_df[schema.pmc_perf_file_prefix]["Dispatch_ID"] > int(m.group(1))
|
||||
]
|
||||
|
||||
@@ -79,7 +79,7 @@ supported_field = [
|
||||
"Min",
|
||||
"Max",
|
||||
"Avg",
|
||||
"PoP",
|
||||
"Pct of Peak",
|
||||
"Peak",
|
||||
"Count",
|
||||
"Mean",
|
||||
@@ -92,22 +92,22 @@ supported_field = [
|
||||
"Channel",
|
||||
"L2 Cache Hit Rate",
|
||||
"Requests",
|
||||
"L1-L2 Read",
|
||||
"L1-L2 Write",
|
||||
"L1-L2 Atomic",
|
||||
"L2-EA Read",
|
||||
"L2-EA Write",
|
||||
"L2-EA Atomic",
|
||||
"L2-EA Read Latency",
|
||||
"L2-EA Write Latency",
|
||||
"L2-EA Atomic Latency",
|
||||
"L2-EA Read Stall - IO",
|
||||
"L2-EA Read Stall - GMI",
|
||||
"L2-EA Read Stall - DRAM",
|
||||
"L2-EA Write Stall - IO",
|
||||
"L2-EA Write Stall - GMI",
|
||||
"L2-EA Write Stall - DRAM",
|
||||
"L2-EA Write Stall - Starve",
|
||||
"L2 Read Req",
|
||||
"L2 Write Req",
|
||||
"L2 Atomic Req",
|
||||
"L2 - Fabric Read Req",
|
||||
"L2 - Fabric Write and Atomic Req",
|
||||
"L2 - Fabric Atomic Req",
|
||||
"L2 - Fabric Read Latency",
|
||||
"L2 - Fabric Write Latency",
|
||||
"L2 - Fabric Atomic Latency",
|
||||
"L2 - Fabric Read Stall (PCIe)",
|
||||
"L2 - Fabric Read Stall (Infinity Fabric™)",
|
||||
"L2 - Fabric Read Stall (HBM)",
|
||||
"L2 - Fabric Write Stall (PCIe)",
|
||||
"L2 - Fabric Write Stall (Infinity Fabric™)",
|
||||
"L2 - Fabric Write Stall (HBM)",
|
||||
"L2 - Fabric Write Starve",
|
||||
]
|
||||
|
||||
# The prefix of raw pmc_perf.csv
|
||||
|
||||
@@ -63,6 +63,7 @@ class MachineSpecs:
|
||||
L2Banks: str
|
||||
LDSBanks: str
|
||||
numSQC: str
|
||||
numPipes: str
|
||||
hbmBW: str
|
||||
compute_partition: str
|
||||
memory_partition: str
|
||||
@@ -96,6 +97,7 @@ class MachineSpecs:
|
||||
L2Banks: {self.L2Banks}
|
||||
LDSBanks: {self.LDSBanks}
|
||||
numSQC: {self.numSQC}
|
||||
numPipes: {self.numPipes}
|
||||
hbmBW: {self.hbmBW} MB/s
|
||||
compute_partition: {self.compute_partition}
|
||||
memory_partition: {self.memory_partition}
|
||||
@@ -114,6 +116,7 @@ def gpuinfo():
|
||||
"max_sclk": None,
|
||||
"num_CU": None,
|
||||
"num_SIMD": None,
|
||||
"numPipes": None,
|
||||
"num_SE": None,
|
||||
"wave_size": None,
|
||||
"grp_size": None,
|
||||
@@ -197,6 +200,7 @@ def gpuinfo():
|
||||
gpu_info['L2Banks'] = str(soc_module.SOC_PARAM['L2Banks'])
|
||||
gpu_info['numSQC'] = str(soc_module.SOC_PARAM['numSQC'])
|
||||
gpu_info['LDSBanks'] = str(soc_module.SOC_PARAM['LDSBanks'])
|
||||
gpu_info['numPipes'] = str(soc_module.SOC_PARAM['numPipes'])
|
||||
except KeyError as e:
|
||||
error("Incomplete class definition for %s. Expected a field for %s in SOC_PARAM." % (gpu_arch, e))\
|
||||
|
||||
@@ -358,6 +362,7 @@ def get_machine_specs(devicenum):
|
||||
gpu_info['L2Banks'],
|
||||
gpu_info['LDSBanks'],
|
||||
gpu_info['numSQC'],
|
||||
gpu_info['numPipes'],
|
||||
hbmBW,
|
||||
compute_partition,
|
||||
memory_partition,
|
||||
|
||||
@@ -299,7 +299,7 @@ def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof, roof
|
||||
header += "command,"
|
||||
header += "host_name,host_cpu,sbios,host_distro,host_kernel,host_rocmver,date,"
|
||||
header += "gpu_soc,vbios,numSE,numCU,numSIMD,waveSize,maxWavesPerCU,maxWorkgroupSize,"
|
||||
header += "L1,L2,sclk,mclk,cur_sclk,cur_mclk,L2Banks,LDSBanks,name,numSQC,hbmBW,compute_partition,memory_partition,"
|
||||
header += "L1,L2,sclk,mclk,cur_sclk,cur_mclk,L2Banks,LDSBanks,name,numSQC,numPipes,hbmBW,compute_partition,memory_partition,"
|
||||
header += "ip_blocks\n"
|
||||
sysinfo.write(header)
|
||||
|
||||
@@ -344,6 +344,7 @@ def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof, roof
|
||||
mspec.LDSBanks,
|
||||
mspec.GPU,
|
||||
mspec.numSQC,
|
||||
mspec.numPipes,
|
||||
mspec.hbmBW,
|
||||
mspec.compute_partition,
|
||||
mspec.memory_partition,
|
||||
|
||||
Fai riferimento in un nuovo problema
Block a user