Files
2025-09-03 12:06:48 -05:00

247 baris
8.3 KiB
Python

# MIT License
# Copyright (c) 2017-2025 Advanced Micro Devices, Inc.
# 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 sys
import text_sample_ex
import binary_sample_ex
#source file handling: from last command line argument or default
argc = len(sys.argv)
#print(argc)
#print(sys.argv)
#default source file
se_no = 0
has_exp_value = False
exp_value = 0
has_exp_range = False
exp_range = [0, 0]
is_text_file = True
length = -1
for i in range(1, argc):
#print(sys.argv[i])
if sys.argv[i] == "-h":
print("help info")
print("python3 da_16b.py [options] file_name")
print(" -h: Print help info")
print(" -s size: Specify valid lenght of SPM samples in a binary data file")
print(" -b: Specify file is a binary")
print(" -e exp_val: Specify expected value for the first data sample")
print(" -r lower_val,upper_val: Specify range of the first data sample")
sys.exit(0)
if sys.argv[i] == "-se":
se_no = int(sys.argv[i + 1])
if se_no > 3:
se_no = 0
i += 1
if sys.argv[i] == "-e":
has_exp_value = True
exp_value = int(sys.argv[i + 1])
i += 1
if sys.argv[i] == "-r":
has_exp_range = True
exp_range = sys.argv[i + 1].split(',')
i += 1
if sys.argv[i] == "-b":
is_text_file = False
if sys.argv[i] == "-s":
length = int(sys.argv[i + 1])
i += 1
#spm_source = "/home/chun/proj/aqlprofile_spm_new/build/test/spm_dump_0.txt"
spm_source = sys.argv[argc - 1]
message = "Info: data analysis for "
if is_text_file:
message += "text sample file: "
else:
message += "binary sample file: "
message += "with lenght " + str(length) + "B "
message += spm_source
if has_exp_value:
message += "\n\twith expect data: " + str(exp_value)
if has_exp_range:
message += "\n\twith expect data range: " + str(exp_range[0]) + " - " + str(exp_range[1])
print(message)
if is_text_file:
text_sample_ex.sample_ex(spm_source)
else:
binary_sample_ex.sample_ex(spm_source, length)
print("done sample extraction!")
print("extract counter samples for se%d"%(se_no))
file = open("samples.txt", "r")
lines = file.readlines()
file.close()
tss = []
se1s = []
se2s = []
se3s = []
se4s = []
#global time stamps
index = 0
delta = 0
prev_time = 0
start_ts = ""
while index < len(lines):
line = lines[index + 3].strip() + lines[index + 2].strip() + lines[index + 1].strip() + lines[index].strip()
aligned_index = '[%4s]' % (str(index))
if index == 0:
tss.append(line + aligned_index + ", -")
start_ts = line
else:
delta = int(line, 16) - prev_time
tss.append(line + aligned_index + "," + str(delta))
prev_time = int(line, 16)
index += 160
#print(start_ts)
#print(delta)
print("total spm sample(s): %d"%(len(tss)))
#shader engine 1 samples
sum0 = 0
sum1 = 0
sum2 = 0
sum3 = 0
sum4 = 0
sum5 = 0
sum6 = 0
sum7 = 0
sum8 = 0
sum9 = 0
sum10 = 0
sum11 = 0
sum12 = 0
sum13 = 0
sum14 = 0
sum15 = 0
index = 32 * (se_no + 1)
while index < len(lines):
aligned_index = '[%4s]' % (str(index))
event0 = lines[index].strip() + aligned_index
sum0 += int(lines[index].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16))
event1 = lines[index + 16].strip() + aligned_index
sum1 += int(lines[index + 16].strip(), 16)
aligned_index = '[%4s]' % (str(index + 1))
event2 = lines[index + 1].strip() + aligned_index
sum2 += int(lines[index + 1].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 1))
event3 = lines[index + 16 + 1].strip() + aligned_index
sum3 += int(lines[index + 16 + 1].strip(), 16)
aligned_index = '[%4s]' % (str(index + 2))
event4 = lines[index + 2].strip() + aligned_index
sum4 += int(lines[index + 2].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 2))
event5 = lines[index + 16 + 2].strip() + aligned_index
sum5 += int(lines[index + 16 + 2].strip(), 16)
aligned_index = '[%4s]' % (str(index + 3))
event6 = lines[index + 3].strip() + aligned_index
sum6 += int(lines[index + 3].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 3))
event7 = lines[index + 16 + 3].strip() + aligned_index
sum7 += int(lines[index + 16 + 3].strip(), 16)
aligned_index = '[%4s]' % (str(index + 4))
event8 = lines[index + 4].strip() + aligned_index
sum8 += int(lines[index + 4].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 4))
event9 = lines[index + 16 + 4].strip() + aligned_index
sum9 += int(lines[index + 16 + 4].strip(), 16)
aligned_index = '[%4s]' % (str(index + 5))
event10 = lines[index + 5].strip() + aligned_index
sum10 += int(lines[index + 5].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 5))
event11 = lines[index + 16 + 5].strip() + aligned_index
sum11 += int(lines[index + 16 + 5].strip(), 16)
aligned_index = '[%4s]' % (str(index + 6))
event12 = lines[index + 6].strip() + aligned_index
sum12 += int(lines[index + 6].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 6))
event13 = lines[index + 16 + 6].strip() + aligned_index
sum13 += int(lines[index + 16 + 6].strip(), 16)
aligned_index = '[%4s]' % (str(index + 7))
event14 = lines[index + 7].strip() + aligned_index
sum14 += int(lines[index + 7].strip(), 16)
aligned_index = '[%4s]' % (str(index + 16 + 7))
event15 = lines[index + 16 + 7].strip() + aligned_index
sum15 += int(lines[index + 16 + 7].strip(), 16)
line = event0 + "," + event1 + "," + event2 + "," + event3 + "," + event4 + "," + event5 + "," + event6 + "," + event7 + "," + event8 + "," + event9+ "," + event10 + "," + event11 + "," + event12 + "," + event13 + "," + event14 + "," + event15
se1s.append(line)
index += 160
sums = str(sum0) + "," + str(sum1) + "," + str(sum2) + "," + str(sum3) + "," + str(sum4) + "," + str(sum5) + "," + str(sum6) + "," + str(sum7) + "," + str(sum8) + "," + str(sum9) + "," + str(sum10) + "," + str(sum11) + "," + str(sum12) + "," + str(sum13) + "," + str(sum14) + "," + str(sum15)
def save_samples(output_file, tss, se1s):
file = open(output_file, "w")
size = len(tss)
se_empty = False
if len(se1s) == 0:
se_empty = True
#print("xxx: se_empty %r\n"%(se_empty))
#print("tss: %d, se1s:%d"%(len(tss), len(se1s)))
for i in range(0, size):
if se_empty:
file.write("%d,%s\n"%(i,tss[i]))
else:
file.write("%d,%s,%s\n"%(i,tss[i], se1s[i]))
file.write("%s\n"%(sums))
file.close()
output_file = "ofs.txt"
save_samples(output_file, tss, se1s)
print("Info: Time stamp starts at %s with delta %d"%(start_ts, delta))
if has_exp_value:
if exp_value == sum0:
print("Passed: Sample data %d matches expected data"%(sum0))
else:
print("Failed: Sample data %d does not match expected data %d"%(sum0, exp_value))
elif has_exp_range:
if (int(exp_range[0]) <= sum0) and (sum0 <= int(exp_range[1])):
print("Passed: Sample data %d is within expected data range [%s, %s]"%(sum0, exp_range[0], exp_range[1]))
else:
print("Failed: Sample data %d falls out side of expected data range [%s, %s]"%(sum0, exp_range[0], exp_range[1]))
else:
print("Passed: Sample data %d, Please check file ofs.txt for detail"%(sum0))