CastDtypeInputRealize

CastDtypeInputRealize#

参考:tvm/src/relay/quantize/realize.cc

/* \brief for unary operators which requantize its input to dtype_nbit */
Expr CastDtypeInputRealize(const Call& ref_call, const Array<Expr>& new_args,
                           const ObjectRef& ctx) {
  const QConfig& cfg = QConfig::Current();
  ICHECK_EQ(new_args.size(), 1);
  if (const auto* n = new_args[0].as<QRealizeIntExprNode>()) {
    Expr data = Cast(n->data, cfg->dtype_input);
    Expr ret = ForwardOp(ref_call, {data});
    return QRealizeIntExpr(ret, n->dom_scale, cfg->dtype_input);
  }
  ICHECK(!new_args[0]->IsInstance<TempExprNode>());
  return Expr(nullptr);
}

这段代码定义了一个名为 CastDtypeInputRealize 的函数,它接受三个参数:ref_callnew_argsctx。该函数的作用是将一元算子的输入重新量化为 dtype_nbit 类型。

首先,获取当前的 QConfig 对象 cfg。然后检查 new_args 数组的大小是否为 1。如果 new_args[0]QRealizeIntExprNode 类型的实例,那么将 n->data 转换为 cfg->dtype_input 类型,并将结果存储在 data 中。接着,使用 ForwardOp 函数将 ref_call{data} 作为参数传递,并将结果存储在 ret 中。最后,返回 QRealizeIntExpr 对象,其中包含 retn->dom_scalecfg->dtype_input

如果 new_args[0] 不是 TempExprNode 类型的实例,那么返回空的 Expr 对象。