fpu_test_gen.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import numpy as np
  2. import os
  3. import struct
  4. def reverse_endian(data):
  5. result = bytearray()
  6. for i in range(len(data), 0, -1):
  7. result.append(data[i - 1])
  8. return bytes(result)
  9. def generate_fp_vector(cases, filename, dtype=np.float16, big_endian=False):
  10. dsize = 0
  11. if dtype == np.float16:
  12. dsize = 2
  13. elif dtype == np.float32:
  14. dsize = 4
  15. else:
  16. raise ValueError(f"Unknown dtype {dtype}")
  17. x = np.frombuffer(os.urandom(cases * dsize), dtype=dtype)
  18. y = np.frombuffer(os.urandom(cases * dsize), dtype=dtype)
  19. np.seterr(all='ignore')
  20. sum = x + y
  21. mul = x * y
  22. x = x.tobytes()
  23. y = y.tobytes()
  24. sum = sum.tobytes()
  25. mul = mul.tobytes()
  26. with open(filename, 'w') as f:
  27. for i in range(cases):
  28. t = lambda v: reverse_endian(v) if big_endian else v
  29. f.write(' '.join([
  30. t(x[i * dsize:i * dsize + dsize]).hex(),
  31. t(y[i * dsize:i * dsize + dsize]).hex(),
  32. t(sum[i * dsize:i * dsize + dsize]).hex(),
  33. t(mul[i * dsize:i * dsize + dsize]).hex(),
  34. ]) + '\n')
  35. if __name__ == '__main__':
  36. generate_fp_vector(10000, 'fp32_test.hex', dtype=np.float32, big_endian=True)