Remove duplicate normal counters

Interleve TCC channel counters in putput file  e.g.  TCC_HIT[0] TCC_ATOMIC[0] ... TCC_HIT[1] TCC_ATOMIC[1]

Signed-off-by: benrichard-amd <ben.richard@amd.com>
This commit is contained in:
benrichard-amd
2024-07-10 14:55:19 -05:00
committad av David Galiffi
förälder a4fdee488b
incheckning 241a0949e1
+30 -28
Visa fil
@@ -333,8 +333,6 @@ def perfmon_coalesce(pmc_files_list, perfmon_config, workload_dir):
normal_counters = OrderedDict()
mpattern = r"^pmc:(.*)"
for fname in pmc_files_list:
lines = open(fname, "r").read().splitlines()
@@ -347,37 +345,42 @@ def perfmon_coalesce(pmc_files_list, perfmon_config, workload_dir):
continue
# all pmc counters start with "pmc:"
m = re.match(mpattern, stext)
m = re.match(r"^pmc:(.*)", stext)
if m is None:
continue
counters = m.group(1).split()
# Check for accumulate counter
if "SQ_ACCUM_PREV_HIRES" in counters:
# Accumulate counters
accumulate_counters.append(counters.copy())
counters.clear()
# PMC counters
for ctr in counters:
# Channel counter
if '[' in ctr:
else:
# Normal counters
for ctr in counters:
# Channel counter e.g. TCC_ATOMIC[0]
if '[' in ctr:
# Remove number, append "_expand" so we know to add the channel later
channel = int(ctr.split('[')[1].split(']')[0])
if channel == 0:
counter_name = ctr.split('[')[0] + "_expand"
# Remove channel number, append "_expand" so we know
# add the channel numbers back later
channel = int(ctr.split('[')[1].split(']')[0])
if channel == 0:
counter_name = ctr.split('[')[0] + "_expand"
try:
normal_counters[counter_name] += 1
except:
normal_counters[counter_name] = 1
else:
try:
normal_counters[counter_name] += 1
normal_counters[ctr] += 1
except:
normal_counters[counter_name] = 1
else:
counter_name = ctr
try:
normal_counters[ctr] += 1
except:
normal_counters[ctr] = 1
normal_counters[ctr] = 1
# De-duplicate. Remove accumulate counters from normal counters
for accus in accumulate_counters:
for accu in accus:
if accu in normal_counters:
del normal_counters[accu]
output_files = []
@@ -402,23 +405,22 @@ def perfmon_coalesce(pmc_files_list, perfmon_config, workload_dir):
output_files[-1].add(ctr)
# Output to files
for i, f in enumerate(output_files):
file_name = os.path.join(workload_perfmon_dir, "pmc_perf_{}.txt".format(i))
pmc = []
for block_name in f.blocks.keys():
if block_name == "TCC":
# Expand and interleve the TCC channel counters
# e.g. TCC_HIT[0] TCC_ATOMIC[0] ... TCC_HIT[1] TCC_ATOMIC[1] ...
channel_counters = []
num_channels = perfmon_config["TCC_channels"]
for ctr in f.blocks[block_name].elements:
if "_expand" in ctr:
channel_counters.append(ctr.split("_expand")[0])
for i in range(0, num_channels):
for i in range(0, perfmon_config["TCC_channels"]):
for c in channel_counters:
pmc.append("{}[{}]".format(c, i))
@@ -440,8 +442,8 @@ def perfmon_coalesce(pmc_files_list, perfmon_config, workload_dir):
fd.write("kernel:\n")
fd.close()
# add a timestamp file
fd = open(workload_perfmon_dir + "/timestamps.txt", "w")
# Add a timestamp file
fd = open(os.path.join(workload_perfmon_dir, "timestamps.txt"), "w")
fd.write("pmc:\n\n")
fd.write("gpu:\n")
fd.write("range:\n")