import os
import struct
import ctypes
import numpy as np
np.random.seed(23)
def gen_golden_data(param):
data_type = param.data_type
valid_row = param.valid_row
valid_col = param.valid_col
input_arr = np.random.uniform(low=-8, high=8, size=(param.in_row, param.in_col)).astype(data_type)
divider = np.random.uniform(low=-8, high=8, size=(1, 1)).astype(data_type)
output_arr = np.zeros((param.out_row, param.out_col), dtype=data_type)
for i in range(valid_row):
for j in range(valid_col):
output_arr[i, j] = input_arr[i, j] + divider[0, 0]
input_arr.tofile('input.bin')
with open("divider.bin", 'wb') as f:
f.write(struct.pack('f', np.float32(divider[0, 0])))
output_arr.tofile('golden.bin')
class TAddsParams:
def __init__(self, name, data_type, valid_row, valid_col, in_row=None, in_col=None, out_row=None, out_col=None):
self.name = name
self.data_type = data_type
self.valid_row = valid_row
self.valid_col = valid_col
self.in_row = valid_row if in_row is None else in_row
self.in_col = valid_col if in_col is None else in_col
self.out_row = valid_row if out_row is None else out_row
self.out_col = valid_col if out_col is None else out_col
if __name__ == "__main__":
case_params_list = [
TAddsParams("TADDSTest.case1", np.float32, 32, 64),
TAddsParams("TADDSTest.case2", np.float16, 63, 64),
TAddsParams("TADDSTest.case3", np.int32, 31, 128),
TAddsParams("TADDSTest.case4", np.int16, 15, 64 * 3),
TAddsParams("TADDSTest.case5", np.float32, 7, 64 * 7),
TAddsParams("TADDSTest.case6", np.float32, 256, 16),
TAddsParams("TADDSTest.case7", np.float32, 16, 16, 32, 32, 64, 64)
]
for _, case in enumerate(case_params_list):
if not os.path.exists(case.name):
os.makedirs(case.name)
original_dir = os.getcwd()
os.chdir(case.name)
gen_golden_data(case)
os.chdir(original_dir)