tvm
operation.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
24 #ifndef TVM_TE_OPERATION_H_
25 #define TVM_TE_OPERATION_H_
26 
27 #include <tvm/arith/analyzer.h>
28 #include <tvm/te/schedule.h>
29 #include <tvm/te/tensor.h>
30 #include <tvm/tir/buffer.h>
31 #include <tvm/tir/expr.h>
32 #include <tvm/tir/op.h>
33 
34 #include <string>
35 #include <unordered_map>
36 #include <vector>
37 
38 namespace tvm {
40 namespace te {
41 
46 struct TensorDom {
47  // constructor
48  explicit TensorDom(int ndim) : data(ndim) {}
50  std::vector<std::vector<IntSet>> data;
51 };
52 
56 class TVM_DLL OperationNode : public Object {
57  public:
59  std::string name;
61  std::string tag;
64  // virtual destructor.
65  virtual ~OperationNode() {}
67  virtual int num_outputs() const = 0;
72  virtual Array<IterVar> root_iter_vars() const = 0;
78  virtual DataType output_dtype(size_t i) const = 0;
84  virtual Array<PrimExpr> output_shape(size_t i) const = 0;
89  virtual Array<Tensor> InputTensors() const = 0;
97  virtual Operation ReplaceInputs(const Operation& self,
98  const std::unordered_map<Tensor, Tensor>& rmap) const = 0;
108  virtual void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
109  const std::unordered_map<const VarNode*, IntSet>& dom_map,
110  std::unordered_map<Tensor, TensorDom>* out_dom_map) const = 0;
119  virtual void GatherBound(const Operation& self,
120  const std::unordered_map<Tensor, TensorDom>& tensor_dom,
121  std::unordered_map<IterVar, Range>* out_dom_map) const = 0;
131  virtual Stmt BuildRealize(const Stage& stage,
132  const std::unordered_map<IterVar, Range>& realize_map, const Stmt& body,
133  String storage_scope = "") const = 0;
141  virtual Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
142  bool debug_keep_trivial_loop) const = 0;
143 
144  static constexpr const char* _type_key = "Operation";
145 
147 };
148 
153  public:
158  // override behavior.
159  int num_outputs() const final;
160  Array<IterVar> root_iter_vars() const final;
161  DataType output_dtype(size_t i) const final;
162  Array<PrimExpr> output_shape(size_t i) const final;
163  Array<Tensor> InputTensors() const final;
165  const std::unordered_map<Tensor, Tensor>& rmap) const final;
166  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
167  const std::unordered_map<const VarNode*, IntSet>& dom_map,
168  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
169  void GatherBound(const Operation& self, const std::unordered_map<Tensor, TensorDom>& tensor_dom,
170  std::unordered_map<IterVar, Range>* out_dom_map) const final;
171  Stmt BuildRealize(const Stage& stage, const std::unordered_map<IterVar, Range>& realize_map,
172  const Stmt& body, String storage_scope = "") const final;
173  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
174  bool debug_keep_trivial_loop) const final;
175 
177  v->Visit("name", &name);
178  v->Visit("tag", &tag);
179  v->Visit("attrs", &attrs);
180  v->Visit("shape", &shape);
181  v->Visit("dtype", &dtype);
182  }
183 
184  static constexpr const char* _type_key = "PlaceholderOp";
186 };
187 
192 class PlaceholderOp : public Operation {
193  public:
194  TVM_DLL PlaceholderOp(std::string name, Array<PrimExpr> shape, DataType dtype);
195 
197 };
198 
204 class TVM_DLL BaseComputeOpNode : public OperationNode {
205  public:
210  // override functions
212  Array<PrimExpr> output_shape(size_t idx) const final;
213  void GatherBound(const Operation& self, const std::unordered_map<Tensor, TensorDom>& tensor_dom,
214  std::unordered_map<IterVar, Range>* out_dom_map) const final;
215  Stmt BuildRealize(const Stage& stage, const std::unordered_map<IterVar, Range>& realize_map,
216  const Stmt& body, String storage_scope = "") const final;
217  virtual size_t num_schedulable_dims() const = 0;
218 
219  static constexpr const char* _type_key = "BaseComputeOp";
221 };
222 
226 class TVM_DLL ComputeOpNode : public BaseComputeOpNode {
227  public:
232  // override functions
233  int num_outputs() const final;
234  DataType output_dtype(size_t i) const final;
235  Array<Tensor> InputTensors() const final;
236  Operation ReplaceInputs(const Operation& self,
237  const std::unordered_map<Tensor, Tensor>& rmap) const final;
238  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
239  const std::unordered_map<const VarNode*, IntSet>& dom_map,
240  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
241  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
242  bool debug_keep_trivial_loop) const final;
243  size_t num_schedulable_dims() const final;
244 
245  void VisitAttrs(AttrVisitor* v) {
246  v->Visit("name", &name);
247  v->Visit("tag", &tag);
248  v->Visit("attrs", &attrs);
249  v->Visit("axis", &axis);
250  v->Visit("reduce_axis", &reduce_axis);
251  v->Visit("body", &body);
252  }
253 
254  static constexpr const char* _type_key = "ComputeOp";
256 };
257 
262 class ComputeOp : public Operation {
263  public:
264  TVM_DLL ComputeOp(std::string name, std::string tag, Map<String, ObjectRef> attrs,
265  Array<IterVar> axis, Array<PrimExpr> body);
266 
269 };
270 
275  public:
288  // override functions
289  int num_outputs() const final;
290  DataType output_dtype(size_t i) const final;
291  Array<Tensor> InputTensors() const final;
292  Operation ReplaceInputs(const Operation& self,
293  const std::unordered_map<Tensor, Tensor>& rmap) const final;
294  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
295  const std::unordered_map<const VarNode*, IntSet>& dom_map,
296  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
297  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
298  bool debug_keep_trivial_loop) const final;
299  size_t num_schedulable_dims() const final;
300 
301  void VisitAttrs(AttrVisitor* v) {
302  v->Visit("name", &name);
303  v->Visit("tag", &tag);
304  v->Visit("axis", &axis);
305  v->Visit("reduce_axis", &reduce_axis);
306  v->Visit("schedulable_ndim", &schedulable_ndim);
307  v->Visit("intrin", &intrin);
308  v->Visit("inputs", &inputs);
309  v->Visit("input_regions", &input_regions);
310  v->Visit("scalar_inputs", &scalar_inputs);
311  }
312 
313  static constexpr const char* _type_key = "TensorComputeOp";
315 };
316 
321 class TensorComputeOp : public Operation {
322  public:
323  TVM_DLL TensorComputeOp(std::string name, std::string tag, Array<IterVar> axis,
324  Array<IterVar> reduce_axis, int schedulable_ndim, TensorIntrin intrin,
325  Array<Tensor> tensors, Array<Region> regions,
326  Array<PrimExpr> scalar_inputs);
327 
329 };
330 
334 class ScanOpNode : public OperationNode {
335  public:
361  // override behavior.
362  int num_outputs() const final;
363  Array<IterVar> root_iter_vars() const final;
364  DataType output_dtype(size_t i) const final;
365  Array<PrimExpr> output_shape(size_t i) const final;
366  Array<Tensor> InputTensors() const final;
367  Operation ReplaceInputs(const Operation& self,
368  const std::unordered_map<Tensor, Tensor>& rmap) const final;
369  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
370  const std::unordered_map<const VarNode*, IntSet>& dom_map,
371  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
372  void GatherBound(const Operation& self, const std::unordered_map<Tensor, TensorDom>& tensor_dom,
373  std::unordered_map<IterVar, Range>* out_dom_map) const final;
374  Stmt BuildRealize(const Stage& stage, const std::unordered_map<IterVar, Range>& realize_map,
375  const Stmt& body, String storage_scope = "") const final;
376  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
377  bool debug_keep_trivial_loop) const final;
378 
379  void VisitAttrs(AttrVisitor* v) {
380  v->Visit("name", &name);
381  v->Visit("tag", &tag);
382  v->Visit("attrs", &attrs);
383  v->Visit("scan_axis", &scan_axis);
384  v->Visit("init", &init);
385  v->Visit("update", &update);
386  v->Visit("state_placeholder", &state_placeholder);
387  v->Visit("inputs", &inputs);
388  v->Visit("spatial_axis_", &spatial_axis_);
389  }
390 
391  static constexpr const char* _type_key = "ScanOp";
393 };
394 
399 class ScanOp : public Operation {
400  public:
401  TVM_DLL ScanOp(std::string name, std::string tag, Map<String, ObjectRef> attrs, IterVar axis,
402  Array<Tensor> init, Array<Tensor> update, Array<Tensor> state_placeholder,
403  Array<Tensor> input);
404 
406 };
407 
411 class ExternOpNode : public OperationNode {
412  public:
421 
424  // override functions
425  int num_outputs() const final;
426  Array<IterVar> root_iter_vars() const final;
427  DataType output_dtype(size_t i) const final;
428  Array<PrimExpr> output_shape(size_t i) const final;
429  Array<Tensor> InputTensors() const final;
430  Operation ReplaceInputs(const Operation& self,
431  const std::unordered_map<Tensor, Tensor>& rmap) const final;
432  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
433  const std::unordered_map<const VarNode*, IntSet>& dom_map,
434  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
435  void GatherBound(const Operation& self, const std::unordered_map<Tensor, TensorDom>& tensor_dom,
436  std::unordered_map<IterVar, Range>* out_dom_map) const final;
437  Stmt BuildRealize(const Stage& stage, const std::unordered_map<IterVar, Range>& realize_map,
438  const Stmt& body, String storage_scope = "") const final;
439  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
440  bool debug_keep_trivial_loop) const final;
441 
442  void VisitAttrs(AttrVisitor* v) {
443  v->Visit("name", &name);
444  v->Visit("tag", &tag);
445  v->Visit("attrs", &attrs);
446  v->Visit("inputs", &inputs);
447  v->Visit("input_placeholders", &input_placeholders);
448  v->Visit("output_placeholders", &output_placeholders);
449  v->Visit("body", &body);
450  }
451 
452  static constexpr const char* _type_key = "ExternOp";
454 };
455 
460 class ExternOp : public Operation {
461  public:
462  TVM_DLL ExternOp(std::string name, std::string tag, Map<String, ObjectRef> attrs,
463  Array<Tensor> inputs, Array<Buffer> input_placeholders,
464  Array<Buffer> output_placeholders, Stmt body);
465 
467 };
468 
472 class HybridOpNode : public OperationNode {
473  public:
486 
489  // override functions
490  int num_outputs() const final;
491  Array<IterVar> root_iter_vars() const final;
492  DataType output_dtype(size_t i) const final;
493  Array<PrimExpr> output_shape(size_t i) const final;
494  Array<Tensor> InputTensors() const final;
495  Operation ReplaceInputs(const Operation& self,
496  const std::unordered_map<Tensor, Tensor>& rmap) const final;
497  void PropBoundToInputs(const Operation& self, arith::Analyzer* analyzer,
498  const std::unordered_map<const VarNode*, IntSet>& dom_map,
499  std::unordered_map<Tensor, TensorDom>* out_dom_map) const final;
500  void GatherBound(const Operation& self, const std::unordered_map<Tensor, TensorDom>& tensor_dom,
501  std::unordered_map<IterVar, Range>* out_dom_map) const final;
502  Stmt BuildRealize(const Stage& stage, const std::unordered_map<IterVar, Range>& realize_map,
503  const Stmt& body, String storage_scope = "") const final;
504  Stmt BuildProvide(const Stage& stage, const std::unordered_map<IterVar, Range>& dom_map,
505  bool debug_keep_trivial_loop) const final;
506 
507  void VisitAttrs(AttrVisitor* v) {
508  v->Visit("name", &name);
509  v->Visit("tag", &tag);
510  v->Visit("attrs", &attrs);
511  v->Visit("inputs", &inputs);
512  v->Visit("outputs", &outputs);
513  v->Visit("axis", &axis);
514  v->Visit("body", &body);
515  }
516 
517  static constexpr const char* _type_key = "HybridOp";
519 };
520 
525 class HybridOp : public Operation {
526  public:
527  TVM_DLL HybridOp(std::string name, std::string tag, Map<String, ObjectRef> attrs,
528  Array<Tensor> inputs, Array<Tensor> outputs, Stmt body);
529 
531 };
532 
538 TVM_DLL Var var(std::string name_hint, DataType t = DataType::Int(32));
539 
546 TVM_DLL IterVar thread_axis(Range dom, std::string tag);
547 
554 TVM_DLL IterVar reduce_axis(Range dom, std::string name = "rv");
555 
557 using FCompute = std::function<PrimExpr(const Array<Var>& i)>;
558 
560 using FBatchCompute = std::function<Array<PrimExpr>(const Array<Var>& i)>;
561 
569  std::string name = "placeholder");
570 
580 TVM_DLL Tensor compute(Array<PrimExpr> shape, FCompute fcompute, std::string name = "tensor",
581  std::string tag = "", Map<String, ObjectRef> attrs = {});
582 
593  std::string name = "tensor", std::string tag = "",
594  Map<String, ObjectRef> attrs = {});
595 
609  Array<Tensor> state_placeholder, Array<Tensor> inputs = Array<Tensor>(),
610  std::string name = "scan", std::string tag = "",
611  Map<String, ObjectRef> attrs = {});
612 
613 // same as compute, specialized for different fcompute function
614 inline Tensor compute(Array<PrimExpr> shape, std::function<PrimExpr(Var)> f,
615  std::string name = "tensor", std::string tag = "",
616  Map<String, ObjectRef> attrs = {}) {
617  FCompute fc = [f](const Array<Var>& i) { return f(i[0]); };
618  return compute(shape, fc, name, tag, attrs);
619 }
620 inline Tensor compute(Array<PrimExpr> shape, std::function<PrimExpr(Var, Var)> f,
621  std::string name = "tensor", std::string tag = "",
622  Map<String, ObjectRef> attrs = {}) {
623  FCompute fc = [f](const Array<Var>& i) { return f(i[0], i[1]); };
624  return compute(shape, fc, name, tag, attrs);
625 }
626 inline Tensor compute(Array<PrimExpr> shape, std::function<PrimExpr(Var, Var, Var)> f,
627  std::string name = "tensor", std::string tag = "",
628  Map<String, ObjectRef> attrs = {}) {
629  FCompute fc = [f](const Array<Var>& i) { return f(i[0], i[1], i[2]); };
630  return compute(shape, fc, name, tag, attrs);
631 }
632 inline Tensor compute(Array<PrimExpr> shape, std::function<PrimExpr(Var, Var, Var, Var)> f,
633  std::string name = "tensor", std::string tag = "",
634  Map<String, ObjectRef> attrs = {}) {
635  FCompute fc = [f](const Array<Var>& i) { return f(i[0], i[1], i[2], i[3]); };
636  return compute(shape, fc, name, tag, attrs);
637 }
638 
639 // inline function.
640 inline const OperationNode* Operation::operator->() const {
641  return static_cast<const OperationNode*>(get());
642 }
643 } // namespace te
644 } // namespace tvm
645 #endif // TVM_TE_OPERATION_H_
Algebra expression simplifications.
Symbolic n-dimensional array, to represent a memory buffer.
Visitor class to get the attributes of an AST/IR node. The content is going to be called for each fie...
Definition: reflection.h:52
Reference to PrimExprNode.
Definition: expr.h:115
Range container
Definition: expr.h:725
Analyzer that contains bunch of sub-analyzers.
Definition: analyzer.h:629
Managed reference to IntSetNode.
Definition: int_set.h:68
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:289
Runtime primitive data type.
Definition: data_type.h:43
static DataType Float(int bits, int lanes=1)
Construct an float type.
Definition: data_type.h:236
static DataType Int(int bits, int lanes=1)
Construct an int type.
Definition: data_type.h:219
Map container of NodeRef->NodeRef in DSL graph. Map implements copy on write semantics,...
Definition: map.h:1271
base class of all object containers.
Definition: object.h:171
Reference to string objects.
Definition: string.h:98
A Compute op that compute a tensor on certain domain. This is the base class for ComputeOp (operating...
Definition: operation.h:204
Array< IterVar > axis
IterVar on each axis.
Definition: operation.h:207
Array< IterVar > root_iter_vars() const final
Array< IterVar > reduce_axis
IterVar on each reduction axis, if the body is a Reduce.
Definition: operation.h:209
A Compute op that compute a tensor on certain domain.
Definition: operation.h:226
Array< PrimExpr > body
the compute expression
Definition: operation.h:229
TVM_DECLARE_FINAL_OBJECT_INFO(ComputeOpNode, BaseComputeOpNode)
ComputeOpNode()
constructor
Definition: operation.h:231
int num_outputs() const final
Managed reference to ComputeOpNode.
Definition: operation.h:262
TVM_DEFINE_OBJECT_REF_METHODS(ComputeOp, Operation, ComputeOpNode)
ComputeOp(std::string name, std::string tag, Map< String, ObjectRef > attrs, Array< IterVar > axis, Array< PrimExpr > body)
TVM_DEFINE_OBJECT_REF_COW_METHOD(ComputeOpNode)
External computation that cannot be splitted.
Definition: operation.h:411
Array< Buffer > output_placeholders
Symbolic placeholder representation of outputs.
Definition: operation.h:418
Array< Tensor > inputs
The input tensors.
Definition: operation.h:414
int num_outputs() const final
TVM_DECLARE_FINAL_OBJECT_INFO(ExternOpNode, OperationNode)
Stmt body
the statement that generates the computation.
Definition: operation.h:420
ExternOpNode()
constructor
Definition: operation.h:423
Array< Buffer > input_placeholders
Symbolic placeholder representation of inputs.
Definition: operation.h:416
Managed reference to ExternOpNode.
Definition: operation.h:460
TVM_DEFINE_OBJECT_REF_METHODS(ExternOp, Operation, ExternOpNode)
ExternOp(std::string name, std::string tag, Map< String, ObjectRef > attrs, Array< Tensor > inputs, Array< Buffer > input_placeholders, Array< Buffer > output_placeholders, Stmt body)
A computation operator that generated by hybrid script.
Definition: operation.h:472
HybridOpNode()
constructor
Definition: operation.h:488
Array< Tensor > inputs
The input tensors.
Definition: operation.h:475
Array< Tensor > outputs
Symbolic placeholder representation of outputs.
Definition: operation.h:477
Stmt body
the statement that generates the computation. This is slightly different from the body in ExternOpNod...
Definition: operation.h:485
int num_outputs() const final
TVM_DECLARE_FINAL_OBJECT_INFO(HybridOpNode, OperationNode)
Array< IterVar > axis
The axis of iterations.
Definition: operation.h:479
Managed reference to HybridOpNode.
Definition: operation.h:525
TVM_DEFINE_OBJECT_REF_METHODS(HybridOp, Operation, HybridOpNode)
HybridOp(std::string name, std::string tag, Map< String, ObjectRef > attrs, Array< Tensor > inputs, Array< Tensor > outputs, Stmt body)
Base class of all operation nodes.
Definition: operation.h:56
virtual ~OperationNode()
Definition: operation.h:65
virtual Stmt BuildProvide(const Stage &stage, const std::unordered_map< IterVar, Range > &dom_map, bool debug_keep_trivial_loop) const =0
Build the statement that provide the output tensors.
virtual void GatherBound(const Operation &self, const std::unordered_map< Tensor, TensorDom > &tensor_dom, std::unordered_map< IterVar, Range > *out_dom_map) const =0
Gather the bound from output tensor. Set the range of each root_iter_vars in the op to out_dom_map.
TVM_DECLARE_BASE_OBJECT_INFO(OperationNode, Object)
virtual void PropBoundToInputs(const Operation &self, arith::Analyzer *analyzer, const std::unordered_map< const VarNode *, IntSet > &dom_map, std::unordered_map< Tensor, TensorDom > *out_dom_map) const =0
Propagate the bounds to inputs.
Map< String, ObjectRef > attrs
additional attributes of the operation
Definition: operation.h:63
virtual DataType output_dtype(size_t i) const =0
Get data type. i-th output tensor.
virtual Array< PrimExpr > output_shape(size_t i) const =0
Get shape of i-th output tensor.
virtual int num_outputs() const =0
virtual Array< IterVar > root_iter_vars() const =0
virtual Array< Tensor > InputTensors() const =0
List all the input Tensors.
virtual Operation ReplaceInputs(const Operation &self, const std::unordered_map< Tensor, Tensor > &rmap) const =0
Replace the input of the operation by pattern specified by rmap.
virtual Stmt BuildRealize(const Stage &stage, const std::unordered_map< IterVar, Range > &realize_map, const Stmt &body, String storage_scope="") const =0
Build the Realize statement that realizes the op's output tensors.
std::string name
optional name of the operation
Definition: operation.h:59
std::string tag
optional tag of the operation
Definition: operation.h:61
Operation that produces tensors.
Definition: tensor.h:47
const OperationNode * operator->() const
access the internal node container
Definition: operation.h:640
A placeholder op represents an input placeholder.
Definition: operation.h:152
Array< PrimExpr > output_shape(size_t i) const final
Get shape of i-th output tensor.
Array< PrimExpr > shape
The shape of the input.
Definition: operation.h:155
Stmt BuildProvide(const Stage &stage, const std::unordered_map< IterVar, Range > &dom_map, bool debug_keep_trivial_loop) const final
Build the statement that provide the output tensors.
TVM_DECLARE_BASE_OBJECT_INFO(PlaceholderOpNode, OperationNode)
DataType dtype
The data type of the input.
Definition: operation.h:157
static constexpr const char * _type_key
Definition: operation.h:184
Array< Tensor > InputTensors() const final
List all the input Tensors.
void VisitAttrs(AttrVisitor *v)
Definition: operation.h:176
int num_outputs() const final
DataType output_dtype(size_t i) const final
Get data type. i-th output tensor.
Operation ReplaceInputs(const Operation &self, const std::unordered_map< Tensor, Tensor > &rmap) const final
Replace the input of the operation by pattern specified by rmap.
Stmt BuildRealize(const Stage &stage, const std::unordered_map< IterVar, Range > &realize_map, const Stmt &body, String storage_scope="") const final
Build the Realize statement that realizes the op's output tensors.
void PropBoundToInputs(const Operation &self, arith::Analyzer *analyzer, const std::unordered_map< const VarNode *, IntSet > &dom_map, std::unordered_map< Tensor, TensorDom > *out_dom_map) const final
Propagate the bounds to inputs.
void GatherBound(const Operation &self, const std::unordered_map< Tensor, TensorDom > &tensor_dom, std::unordered_map< IterVar, Range > *out_dom_map) const final
Gather the bound from output tensor. Set the range of each root_iter_vars in the op to out_dom_map.
Array< IterVar > root_iter_vars() const final
Managed reference to PlaceholderOpNode.
Definition: operation.h:192
TVM_DEFINE_OBJECT_REF_METHODS(PlaceholderOp, Operation, PlaceholderOpNode)
PlaceholderOp(std::string name, Array< PrimExpr > shape, DataType dtype)
Symbolic scan.
Definition: operation.h:334
ScanOpNode()
constructor
Definition: operation.h:360
int num_outputs() const final
TVM_DECLARE_FINAL_OBJECT_INFO(ScanOpNode, OperationNode)
Array< Tensor > state_placeholder
The placeholder to refer as states in update.
Definition: operation.h:343
Array< Tensor > init
the initialization tensors
Definition: operation.h:339
IterVar scan_axis
IterVar to scan over.
Definition: operation.h:337
Array< IterVar > spatial_axis_
Spatial axis to indicate spatial dimension of each output. They corresponds to flattened spatial axis...
Definition: operation.h:358
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:348
Array< Tensor > update
the update function represented by tensor
Definition: operation.h:341
Managed reference to ScanOpNode.
Definition: operation.h:399
TVM_DEFINE_OBJECT_REF_METHODS(ScanOp, Operation, ScanOpNode)
ScanOp(std::string name, std::string tag, Map< String, ObjectRef > attrs, IterVar axis, Array< Tensor > init, Array< Tensor > update, Array< Tensor > state_placeholder, Array< Tensor > input)
Stage, contains scheduling for a stage of computation.
Definition: schedule.h:58
A TenorCompute op that compute a tensor with an tensor intrinsic.
Definition: operation.h:274
Array< Region > input_regions
region of input tensors
Definition: operation.h:283
TensorIntrin intrin
TensorIntrin used to compute.
Definition: operation.h:279
TensorComputeOpNode()
constructor
Definition: operation.h:287
TVM_DECLARE_FINAL_OBJECT_INFO(TensorComputeOpNode, BaseComputeOpNode)
Array< Tensor > inputs
input tensors of intrin
Definition: operation.h:281
Array< PrimExpr > scalar_inputs
scalar expression inputs
Definition: operation.h:285
int schedulable_ndim
number of axes that can be scheduled
Definition: operation.h:277
int num_outputs() const final
Managed reference to TensorComputeOpNode.
Definition: operation.h:321
TVM_DEFINE_OBJECT_REF_METHODS(TensorComputeOp, Operation, TensorComputeOpNode)
TensorComputeOp(std::string name, std::string tag, Array< IterVar > axis, Array< IterVar > reduce_axis, int schedulable_ndim, TensorIntrin intrin, Array< Tensor > tensors, Array< Region > regions, Array< PrimExpr > scalar_inputs)
Managed reference to TensorIntrinNode.
Definition: tensor_intrin.h:93
Tensor structure representing a possible input, or intermediate computation result.
Definition: tensor.h:102
Iteration Variable, represents an iteration over an integer interval.
Definition: var.h:315
Container of all statements.
Definition: stmt.h:59
A variable node in the IR.
Definition: var.h:48
a named variable in TIR
Definition: var.h:89
Tensor placeholder(Array< PrimExpr > shape, DataType dtype=DataType::Float(32), std::string name="placeholder")
create a place holder tensor.
Array< Tensor > scan(Array< Tensor > init, Array< Tensor > update, Array< Tensor > state_placeholder, Array< Tensor > inputs=Array< Tensor >(), std::string name="scan", std::string tag="", Map< String, ObjectRef > attrs={})
Construct new tensors by scan.
std::function< PrimExpr(const Array< Var > &i)> FCompute
The compute function to specify the input source of a Tensor.
Definition: operation.h:557
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.
std::function< Array< PrimExpr >(const Array< Var > &i)> FBatchCompute
The compute function to specify the inputs source of Tensors.
Definition: operation.h:560
Var var(std::string name_hint, DataType t=DataType::Int(32))
Construct a new Var expression.
Tensor compute(Array< PrimExpr > shape, FCompute fcompute, std::string name="tensor", std::string tag="", Map< String, ObjectRef > attrs={})
Construct a new tensor by computing over shape, using the computation rule: result_tensor[axis] = fco...
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:1913
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
#define TVM_DECLARE_BASE_OBJECT_INFO(TypeName, ParentType)
helper macro to declare a base object type that can be inherited.
Definition: object.h:679
Temporary data structure to store union of bounds of each axis of Tensor.
Definition: operation.h:46
TensorDom(int ndim)
Definition: operation.h:48
std::vector< std::vector< IntSet > > data
The domain data.
Definition: operation.h:50
Define a schedule.
Dataflow tensor object.
TIR expressions.
Common operators defined for Expr.