tensor: Fix correctness script

This commit is contained in:
Hansung Kim
2024-07-31 11:39:50 -07:00
parent 88cddc2b66
commit 29f7290948
2 changed files with 67 additions and 62 deletions

View File

@@ -1,16 +1,11 @@
import numpy as np import numpy as np
import struct import struct
A_array = np.zeros((16, 8))
B_array = np.zeros((8, 16))
C_array = np.zeros((16, 16))
file = input("simulator output filename: ")
def hex2float(float_hex_str): def hex2float(float_hex_str):
# print(float_hex_str.strip()) # print(float_hex_str.strip())
return struct.unpack(">f",struct.pack(">i",int(float_hex_str,16)))[0] return struct.unpack(">f",struct.pack(">i",int(float_hex_str,16)))[0]
def C_index(threadgroup, thread, register): def C_index(threadgroup, thread, register):
""" """
col = ((tg % 4) / 2) * 8; col = ((tg % 4) / 2) * 8;
@@ -43,7 +38,14 @@ def C_index(threadgroup, thread, register):
return (row, col) return (row, col)
with open(file) as f: def check_sim_output():
file = input("simulator output filename: ")
A_array = np.zeros((16, 8))
B_array = np.zeros((8, 16))
C_array = np.zeros((16, 16))
with open(file) as f:
for line in f.readlines(): for line in f.readlines():
line = line.strip() line = line.strip()
if "warp" in line: if "warp" in line:
@@ -80,28 +82,31 @@ with open(file) as f:
# print(value) # print(value)
C_array[C_index(threadgroup, thread, register)] = hex2float(value) C_array[C_index(threadgroup, thread, register)] = hex2float(value)
return [A_array, B_array, C_array]
expected = np.load("abc.npz")
# expected_A = expected['A_array']
# expected_B = expected['B_array']
# expected_C = expected['C_array']
expected_A = expected['A_array'][0:8, 0:8]
expected_B = expected['B_array'][0:8, 0:8]
expected_C = expected['C_array'][0:8, 0:8]
expected_C = expected_C + expected_A @ expected_B
print('expected A:')
print(expected_A)
print('expected B:')
print(expected_B)
print('expected C:')
print(expected_C[0:8, 0:8])
print('got C:')
print(C_array[0:8, 0:8])
print('diff C:')
print(expected_C[0:8, 0:8] - C_array[0:8, 0:8])
expected_C.astype('float32').tofile("c_expected.bin") if __name__ == "__main__":
expected = np.load("abc.npz")
# expected_A = expected['A_array']
# expected_B = expected['B_array']
# expected_C = expected['C_array']
expected_A = expected['A_array'][0:8, 0:8]
expected_B = expected['B_array'][0:8, 0:8]
expected_C = expected['C_array'][0:8, 0:8]
expected_C = expected_C + expected_A @ expected_B
print('expected A:')
print(expected_A)
print('expected B:')
print(expected_B)
print('expected C:')
print(expected_C[0:8, 0:8])
expected_C.astype('float32').tofile("c_expected.bin")
assert np.allclose(expected_A, A_array) [got_A, got_B, got_C] = check_sim_output()
assert np.allclose(expected_B, B_array) print('got C:')
assert np.allclose(expected_C, C_array) print(C_array[0:8, 0:8])
print('diff C:')
print(expected_C[0:8, 0:8] - C_array[0:8, 0:8])
assert np.allclose(expected_A, got_A)
assert np.allclose(expected_B, got_B)
assert np.allclose(expected_C, got_C)