24 #ifndef TVM_TE_OPERATION_H_
25 #define TVM_TE_OPERATION_H_
28 #include <tvm/ffi/reflection/registry.h>
36 #include <unordered_map>
51 std::vector<std::vector<IntSet>>
data;
64 ffi::Map<ffi::String, ffi::Any>
attrs;
88 namespace refl = tvm::ffi::reflection;
89 refl::ObjectDef<OperationNode>()
113 namespace refl = tvm::ffi::reflection;
114 refl::ObjectDef<PlaceholderOpNode>()
146 namespace refl = tvm::ffi::reflection;
147 refl::ObjectDef<BaseComputeOpNode>()
166 ffi::Array<
Tensor> InputTensors() const final;
168 static
void RegisterReflection() {
169 namespace refl = tvm::ffi::reflection;
181 TVM_DLL
ComputeOp(std::string name, std::string tag, ffi::Map<ffi::String, ffi::Any> attrs,
182 ffi::Array<IterVar> axis, ffi::Array<PrimExpr> body);
225 namespace refl = tvm::ffi::reflection;
226 refl::ObjectDef<ScanOpNode>()
243 TVM_DLL
ScanOp(std::string name, std::string tag,
244 ffi::Optional<ffi::Map<ffi::String, ffi::Any>> attrs,
IterVar axis,
245 ffi::Array<Tensor> init, ffi::Array<Tensor> update,
246 ffi::Array<Tensor> state_placeholder, ffi::Array<Tensor> input);
274 namespace refl = tvm::ffi::reflection;
275 refl::ObjectDef<ExternOpNode>()
290 TVM_DLL
ExternOp(std::string name, std::string tag, ffi::Map<ffi::String, ffi::Any> attrs,
291 ffi::Array<Tensor> inputs, ffi::Array<Buffer> input_placeholders,
292 ffi::Array<Buffer> output_placeholders,
Stmt body);
324 using FBatchCompute = std::function<ffi::Array<PrimExpr>(
const ffi::Array<Var>& i)>;
333 std::string name =
"placeholder");
345 std::string tag =
"", ffi::Map<ffi::String, ffi::Any> attrs = {});
357 std::string name =
"tensor", std::string tag =
"",
358 ffi::Map<ffi::String, ffi::Any> attrs = {});
372 TVM_DLL ffi::Array<Tensor>
scan(ffi::Array<Tensor> init, ffi::Array<Tensor> update,
373 ffi::Array<Tensor> state_placeholder,
374 ffi::Array<Tensor> inputs = ffi::Array<Tensor>(),
375 std::string name =
"scan", std::string tag =
"",
376 ffi::Map<ffi::String, ffi::Any> attrs = {});
380 std::string name =
"tensor", std::string tag =
"",
381 ffi::Map<ffi::String, ffi::Any> attrs = {}) {
382 FCompute fc = [f](
const ffi::Array<Var>& i) {
return f(i[0]); };
386 std::string name =
"tensor", std::string tag =
"",
387 ffi::Map<ffi::String, ffi::Any> attrs = {}) {
388 FCompute fc = [f](
const ffi::Array<Var>& i) {
return f(i[0], i[1]); };
392 std::string name =
"tensor", std::string tag =
"",
393 ffi::Map<ffi::String, ffi::Any> attrs = {}) {
394 FCompute fc = [f](
const ffi::Array<Var>& i) {
return f(i[0], i[1], i[2]); };
398 std::string name =
"tensor", std::string tag =
"",
399 ffi::Map<ffi::String, ffi::Any> attrs = {}) {
400 FCompute fc = [f](
const ffi::Array<Var>& i) {
return f(i[0], i[1], i[2], i[3]); };
Algebra expression simplifications.
Symbolic n-dimensional array, to represent a memory buffer.
Reference to PrimExprNode.
Definition: expr.h:126
Range container
Definition: expr.h:690
Runtime primitive data type.
Definition: data_type.h:45
static DataType Float(int bits, int lanes=1)
Construct an float type.
Definition: data_type.h:293
static DataType Int(int bits, int lanes=1)
Construct an int type.
Definition: data_type.h:276
A Compute op that compute a tensor on certain domain. This is the base class for ComputeOp (operating...
Definition: operation.h:136
ffi::Array< IterVar > reduce_axis
IterVar on each reduction axis, if the body is a Reduce.
Definition: operation.h:141
static void RegisterReflection()
Definition: operation.h:145
ffi::Array< PrimExpr > output_shape(size_t idx) const final
Get shape of i-th output tensor.
TVM_FFI_DECLARE_OBJECT_INFO("te.BaseComputeOp", BaseComputeOpNode, OperationNode)
ffi::Array< IterVar > axis
IterVar on each axis.
Definition: operation.h:139
A Compute op that compute a tensor on certain domain.
Definition: operation.h:157
ComputeOpNode()
constructor
Definition: operation.h:162
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("te.ComputeOp", ComputeOpNode, BaseComputeOpNode)
int num_outputs() const final
ffi::Array< PrimExpr > body
the compute expression
Definition: operation.h:160
Managed reference to ComputeOpNode.
Definition: operation.h:179
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(ComputeOp, Operation, ComputeOpNode)
ComputeOp(std::string name, std::string tag, ffi::Map< ffi::String, ffi::Any > attrs, ffi::Array< IterVar > axis, ffi::Array< PrimExpr > body)
TVM_DEFINE_OBJECT_REF_COW_METHOD(ComputeOpNode)
External computation that cannot be splitted.
Definition: operation.h:254
int num_outputs() const final
ffi::Array< Tensor > inputs
The input tensors.
Definition: operation.h:257
static void RegisterReflection()
Definition: operation.h:273
ffi::Array< PrimExpr > output_shape(size_t i) const final
Get shape of i-th output tensor.
ffi::Array< Buffer > input_placeholders
Symbolic placeholder representation of inputs.
Definition: operation.h:259
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("te.ExternOp", ExternOpNode, OperationNode)
ffi::Array< Tensor > InputTensors() const final
List all the input Tensors.
Stmt body
the statement that generates the computation.
Definition: operation.h:263
ExternOpNode()
constructor
Definition: operation.h:266
ffi::Array< Buffer > output_placeholders
Symbolic placeholder representation of outputs.
Definition: operation.h:261
DataType output_dtype(size_t i) const final
Get data type. i-th output tensor.
Managed reference to ExternOpNode.
Definition: operation.h:288
ExternOp(std::string name, std::string tag, ffi::Map< ffi::String, ffi::Any > attrs, ffi::Array< Tensor > inputs, ffi::Array< Buffer > input_placeholders, ffi::Array< Buffer > output_placeholders, Stmt body)
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(ExternOp, Operation, ExternOpNode)
Base class of all operation nodes.
Definition: operation.h:57
TVM_FFI_DECLARE_OBJECT_INFO("te.Operation", OperationNode, ffi::Object)
virtual ~OperationNode()
Definition: operation.h:66
virtual ffi::Array< PrimExpr > output_shape(size_t i) const =0
Get shape of i-th output tensor.
static void RegisterReflection()
Definition: operation.h:87
virtual ffi::Array< Tensor > InputTensors() const =0
List all the input Tensors.
virtual DataType output_dtype(size_t i) const =0
Get data type. i-th output tensor.
virtual int num_outputs() const =0
ffi::Map< ffi::String, ffi::Any > attrs
additional attributes of the operation
Definition: operation.h:64
std::string name
optional name of the operation
Definition: operation.h:60
std::string tag
optional tag of the operation
Definition: operation.h:62
Operation that produces tensors.
Definition: tensor.h:48
const OperationNode * operator->() const
access the internal node container
Definition: operation.h:405
A placeholder op represents an input placeholder.
Definition: operation.h:100
TVM_FFI_DECLARE_OBJECT_INFO("te.PlaceholderOp", PlaceholderOpNode, OperationNode)
DataType dtype
The data type of the input.
Definition: operation.h:105
static void RegisterReflection()
Definition: operation.h:112
ffi::Array< PrimExpr > shape
The shape of the input.
Definition: operation.h:103
int num_outputs() const final
DataType output_dtype(size_t i) const final
Get data type. i-th output tensor.
ffi::Array< Tensor > InputTensors() const final
List all the input Tensors.
ffi::Array< PrimExpr > output_shape(size_t i) const final
Get shape of i-th output tensor.
Managed reference to PlaceholderOpNode.
Definition: operation.h:125
PlaceholderOp(std::string name, ffi::Array< PrimExpr > shape, DataType dtype)
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(PlaceholderOp, Operation, PlaceholderOpNode)
Symbolic scan.
Definition: operation.h:191
ffi::Array< Tensor > state_placeholder
The placeholder to refer as states in update.
Definition: operation.h:200
ScanOpNode()
constructor
Definition: operation.h:217
int num_outputs() const final
ffi::Array< Tensor > init
the initialization tensors
Definition: operation.h:196
DataType output_dtype(size_t i) const final
Get data type. i-th output tensor.
ffi::Array< Tensor > update
the update function represented by tensor
Definition: operation.h:198
ffi::Array< PrimExpr > output_shape(size_t i) const final
Get shape of i-th output tensor.
ffi::Array< Tensor > inputs
the inputs to the scan, these are optionally provided But they can be helpful to provide hints to spe...
Definition: operation.h:205
ffi::Array< Tensor > InputTensors() const final
List all the input Tensors.
static void RegisterReflection()
Definition: operation.h:224
IterVar scan_axis
IterVar to scan over.
Definition: operation.h:194
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("te.ScanOp", ScanOpNode, OperationNode)
ffi::Array< IterVar > spatial_axis_
Spatial axis to indicate spatial dimension of each output. They corresponds to flattened spatial axis...
Definition: operation.h:215
Managed reference to ScanOpNode.
Definition: operation.h:241
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(ScanOp, Operation, ScanOpNode)
ScanOp(std::string name, std::string tag, ffi::Optional< ffi::Map< ffi::String, ffi::Any >> attrs, IterVar axis, ffi::Array< Tensor > init, ffi::Array< Tensor > update, ffi::Array< Tensor > state_placeholder, ffi::Array< Tensor > input)
Tensor structure representing a possible input, or intermediate computation result.
Definition: tensor.h:100
Iteration Variable, represents an iteration over an integer interval.
Definition: var.h:297
Container of all statements.
Definition: stmt.h:67
a named variable in TIR
Definition: var.h:77
Copy-on-write helper macro for IR ffi::ObjectRef types.
std::function< PrimExpr(const ffi::Array< Var > &i)> FCompute
The compute function to specify the input source of a Tensor.
Definition: operation.h:321
ffi::Array< Tensor > scan(ffi::Array< Tensor > init, ffi::Array< Tensor > update, ffi::Array< Tensor > state_placeholder, ffi::Array< Tensor > inputs=ffi::Array< Tensor >(), std::string name="scan", std::string tag="", ffi::Map< ffi::String, ffi::Any > attrs={})
Construct new tensors by scan.
std::function< ffi::Array< PrimExpr >(const ffi::Array< Var > &i)> FBatchCompute
The compute function to specify the inputs source of Tensors.
Definition: operation.h:324
IterVar thread_axis(Range dom, std::string tag)
Create a new IterVar that represents an axis in thread.
IterVar reduce_axis(Range dom, std::string name="rv")
Create a new IterVar for reduction operations.
Tensor compute(ffi::Array< PrimExpr > shape, FCompute fcompute, std::string name="tensor", std::string tag="", ffi::Map< ffi::String, ffi::Any > attrs={})
Construct a new tensor by computing over shape, using the computation rule: result_tensor[axis] = fco...
Var var(std::string name_hint, DataType t=DataType::Int(32))
Construct a new Var expression.
Tensor placeholder(ffi::Array< PrimExpr > shape, DataType dtype=DataType::Float(32), std::string name="placeholder")
create a place holder tensor.
Tensor shape(const Tensor &src, DataType dtype, const std::string name="T_shape", const std::string tag=kInjective)
Get the shape of input tensor.
Definition: transform.h:1981
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition: analyzer.h:37
Temporary data structure to store union of bounds of each axis of Tensor.
Definition: operation.h:47
TensorDom(int ndim)
Definition: operation.h:49
std::vector< std::vector< IntSet > > data
The domain data.
Definition: operation.h:51
Common operators defined for Expr.