| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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)
|