import numpy as np import os import struct def reverse_endian(data): result = bytearray() for i in range(len(data), 0, -1): result.append(data[i - 1]) return bytes(result) def generate_fp_vector(cases, filename, dtype=np.float16, big_endian=False): dsize = 0 if dtype == np.float16: dsize = 2 elif dtype == np.float32: dsize = 4 else: raise ValueError(f"Unknown dtype {dtype}") x = np.frombuffer(os.urandom(cases * dsize), dtype=dtype) y = np.frombuffer(os.urandom(cases * dsize), dtype=dtype) np.seterr(all='ignore') sum = x + y mul = x * y x = x.tobytes() y = y.tobytes() sum = sum.tobytes() mul = mul.tobytes() with open(filename, 'w') as f: for i in range(cases): t = lambda v: reverse_endian(v) if big_endian else v f.write(' '.join([ t(x[i * dsize:i * dsize + dsize]).hex(), t(y[i * dsize:i * dsize + dsize]).hex(), t(sum[i * dsize:i * dsize + dsize]).hex(), t(mul[i * dsize:i * dsize + dsize]).hex(), ]) + '\n') if __name__ == '__main__': generate_fp_vector(30, 'fp16_test.hex', dtype=np.float16, big_endian=True)