TVM函数注册机制

以tvm.graph_runtime.create为例

宏展开

  1. #define TVM_REGISTER_GLOBAL(OpName) TVM_STR_CONCAT(TVM_FUNC_REG_VAR_DEF, __COUNTER__) = ::tvm::runtime::Registry::Register(OpName)
    1. 扩展到:
      1. TVM_STR_CONCAT(TVM_FUNC_REG_VAR_DEF, __COUNTER__) = ::tvm::runtime::Registry::Register("tvm.graph_runtime.create")
  2. #define TVM_FUNC_REG_VAR_DEF static TVM_ATTRIBUTE_UNUSED ::tvm::runtime::Registry& __mk_##TVM
  3. #define TVM_ATTRIBUTE_UNUSED __attribute__((unused))
  4. __COUNTER__ 为编译器递增计数器,
  5. #define TVM_STR_CONCAT_(__x, __y) __x##__y              //字符串拼接
    1. #define TVM_STR_CONCAT(__x, __y) TVM_STR_CONCAT_(__x, __y)
  6. 所以彻底展开后为:
    1. ::tvm::runtime::Registry& __mk_0 =  ::tvm::runtime::Registry::Register("tvm.graph_runtime.create").set_body()
    2. set_body中为一个注册函数,lambda表达式而已
  7. Register类的构造函数,TVM_DLL static Registry& Register(const std::string& name, bool override = false);  // NOLINT(*)
    1. 函数简介为Register a function with given name,参数cna_override为是否覆盖原来的注册函数贴实现如下:
      1. Manager里边函数一个静态函数Global,获取单示例inst,属性fmap保存所有name,及registry示例
  8. set_body函数对构造函数返回的registry示例设置function,示例function为一lambda表达式,调用了c函数,GraphRuntimeCreate

获取注册函数,获取注册函数通过get方法,如下代码片段:

  1. _LIB 通过调用 ctypes.CDLL模块得到,

  2. TVMFuncGetGlobal实现如下:
  3. Get方法如下:
    1. func_即为set_body设置进去的函数,
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值