Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

uTVM runtime

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった

7月1日のブログに書いた uTVM

vengineer.hatenablog.com

ちょっと進捗があったみたい。

A replacement implementation of the TVM runtime, focused on a minimal subset of the overall runtime.

ARMv7/x86で、12kb以下の .text だって。 

github.com

サンプルコードは、ここにあるみたい。

tvm/utvm_runtime_standalone_test.cc at 1de52bb0109af3e7051a573c2b8fa2f039c3d05d · dmlc/tvm · GitHub

こんな感じ。

auto* dsoModule = UTVMRuntimeDSOModuleCreate(so_fname.c_str(), so_fname.size());
ASSERT_NE(dsoModule, nullptr);
auto* handle = UTVMRuntimeCreate(json.c_str(), json.size(), dsoModule);
ASSERT_NE(handle, nullptr);

UTVMRuntimeSetInput(handle, 0, &A.ToDLPack()->dl_tensor);
UTVMRuntimeSetInput(handle, 1, &B.ToDLPack()->dl_tensor);
UTVMRuntimeSetInput(handle, 2, &C.ToDLPack()->dl_tensor);
UTVMRuntimeRun(handle);
auto Y = tvm::runtime::NDArray::Empty({2, 3}, {kDLFloat, 32, 1}, {kDLCPU, 0});
UTVMRuntimeGetOutput(handle, 0, &Y.ToDLPack()->dl_tensor);
auto* pY = (float*)Y.ToDLPack()->dl_tensor.data;
for (int i = 0; i < 6; ++i) {
CHECK_LT(fabs(pY[i] - (i + (i + 1) + (i + 2))), 1e-4);
}
UTVMRuntimeDestroy(handle);
UTVMRuntimeDSOModuleDestroy(dsoModule);