code: def main(nI=128 * 3, nO=128 * 3, batch_size=2000):
      print(
          "Setting up data for gemm. 1000 iters,  "
          "nO={nO} nI={nI} batch_size={batch_size}".format(**locals())
      )
      numpy_blas = get_numpy_blas()
      X1, W1 = create_data(nI, nO, batch_size)
      X2 = X1.copy()
      W2 = W1.copy()
      print("Blis gemm...")
      start = timer()
      blis_gemm(X2, W2, n=1000)
      end = timer()
      blis_time = end - start
      print("%.2f seconds" % blis_time)
      print("Numpy (%s) gemm..." % numpy_blas)
      start = timer()
      numpy_gemm(X1, W1)
      end = timer()
      numpy_time = end - start
      print("%.2f seconds" % numpy_time)
      print("Blis einsum ab,cb->ca")
      start = timer()
      blis_einsum(X2, W2, n=1000)
      end = timer()
      blis_time = end - start
      print("%.2f seconds" % blis_time)
      print("Numpy (%s) einsum ab,cb->ca" % numpy_blas)
      start = timer()
      numpy_einsum(X2, W2)
      end = timer()
      numpy_time = end - start
      print("%.2f seconds" % numpy_time)
  
file_path: cython-blis/blis/benchmark.py
imports: import numpy
  import numpy.random
  from blis.py import gemm, einsum
  from timeit import default_timer
label_desc: Use image node_id 7 for calling a global function with example usage: main(nI, nO, batch_size) without return types