branch: master
gemm.py
599 bytesRaw
#!/usr/bin/env python3
import os
#os.environ['OMP_NUM_THREADS'] = '1'
import time
import numpy as np

N = 512
if __name__ == "__main__":
  # N^2
  A = np.random.randn(N, N).astype(np.float32)
  # N^2
  B = np.random.randn(N, N).astype(np.float32)

  # 2N compute in N^2 output cells
  flop = 2*N*N*N
  #print(f"{flop / 1e9:.2f} GFLOP")

  for i in range(10):
    st = time.monotonic()
    C = A @ B.T
    et = time.monotonic()
    s = et-st
    print(f"{flop/s * 1e-9:.2f} GFLOP/S, {s*1e3:.2f} ms")

  with open("/tmp/matmul", "wb") as f:
    f.write(A.data)
    f.write(B.data)
    f.write(C.data)