Hello, I’m looking into how TVM can optimize matrix-vector multiplication and 2D-convolutions on FPGAs. Starting with the optimizing GEMM tutorial provided, I was able to achieve basic vector-matrix multiplication by having the size of the matrices be (M,N) and (N,1). I’m now trying to mimic this behavior only using a (M,N) matrix and a (N) vector but I keep getting a syntax error at
func(a,b,c)
I’m sure its something basic in TVM I’m misunderstanding but any help would be appreciated! Here is the code below
(I just want to get the vector-matrix mult working before targeting the FPGA)
import tvm
import numpy
K = 1024
dtype = "float32"
target = 'llvm'
ctx = tvm.context(target, 0)
a = tvm.nd.array(numpy.random.rand(K,).astype(dtype), ctx)
b = tvm.nd.array(numpy.random.rand(K,K).astype(dtype), ctx)
answer = numpy.dot(b.asnumpy(), a.asnumpy())
print(answer)
k = tvm.reduce_axis((0,K), 'k')
A = tvm.placeholder((K,), name = 'A')
B = tvm.placeholder((K,K), name = 'B')
C = tvm.compute(A.shape, lambda x: tvm.sum(B[x,k] * A[k], axis = k), name='C')
s = tvm.create_schedule(C.op)
func = tvm.build(s, [A, B, C], target=target, name='vmmult')
c = tvm.nd.array(numpy.zeros((K,),dtype=dtype, ctx)
func(a, b, c)
tvm.testing.assert_allclose(c.asnumpy(), answer, rtol=1e-5)