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_call
、new_args
和 ctx
。该函数的作用是将一元算子的输入重新量化为 dtype_nbit
类型。
首先,获取当前的 QConfig
对象 cfg
。然后检查 new_args
数组的大小是否为 1
。如果 new_args[0]
是 QRealizeIntExprNode
类型的实例,那么将 n->data
转换为 cfg->dtype_input
类型,并将结果存储在 data
中。接着,使用 ForwardOp
函数将 ref_call
和 {data}
作为参数传递,并将结果存储在 ret
中。最后,返回 QRealizeIntExpr
对象,其中包含 ret
、n->dom_scale
和 cfg->dtype_input
。
如果 new_args[0]
不是 TempExprNode
类型的实例,那么返回空的 Expr
对象。