tvm
instruction.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 #ifndef TVM_TIR_SCHEDULE_INSTRUCTION_H_
20 #define TVM_TIR_SCHEDULE_INSTRUCTION_H_
21 
22 #include <tvm/node/reflection.h>
23 
24 #include <utility>
25 
26 namespace tvm {
27 
28 // Forward declaration
29 template <typename, typename>
30 class AttrRegistry;
31 
32 namespace tir {
33 
34 // Forward declaration
35 class Schedule;
36 
45 using FInstructionApply = runtime::TypedPackedFunc<Array<ObjectRef>(
46  Schedule sch, const Array<ObjectRef>& inputs, const Array<ObjectRef>& attrs,
47  const Optional<ObjectRef>& decision)>;
48 
58  const Array<ObjectRef>& inputs, const Array<ObjectRef>& attrs,
59  const Optional<ObjectRef>& decision, const Array<String>& outputs)>;
60 
68 
76 
90  public:
99  bool is_pure{false};
103  FInstructionAsPython f_as_python{nullptr};
114 
116  v->Visit("name", &name);
117  v->Visit("_is_pure", &is_pure);
118  // not visited: f_apply_to_schedule
119  // not visited: f_as_python
120  // not visited: f_attrs_as_json
121  // not visited: f_attrs_from_json
122  }
123 
124  static constexpr const char* _type_key = "tir.InstructionKind";
126 };
127 
133  public:
139  static InstructionKind Get(const String& name);
141 };
142 
145  public:
173 
175  v->Visit("kind", &kind);
176  v->Visit("inputs", &inputs);
177  v->Visit("attrs", &attrs);
178  v->Visit("outputs", &outputs);
179  }
180 
181  static constexpr const char* _type_key = "tir.Instruction";
183 };
184 
190  public:
198  explicit Instruction(InstructionKind kind, Array<ObjectRef> inputs, Array<ObjectRef> attrs,
199  Array<ObjectRef> outputs);
200 
202 };
203 
209 #define TVM_INST_KIND_REGISTER_VAR_DEF \
210  static DMLC_ATTRIBUTE_UNUSED ::tvm::tir::InstructionKindRegEntry& __make_##InstructionKind
211 
229 #define TVM_REGISTER_INST_KIND(InstructionKindName) \
230  TVM_STR_CONCAT(TVM_INST_KIND_REGISTER_VAR_DEF, __COUNTER__) = \
231  ::tvm::tir::InstructionKindRegEntry::RegisterOrGet(InstructionKindName).set_name()
232 
235  public:
236  static InstructionKindRegEntry& RegisterOrGet(const String& name);
237 
239  get_mutable()->name = this->name;
240  return *this;
241  }
242 
244  get_mutable()->is_pure = is_pure;
245  return *this;
246  }
247 
249  get_mutable()->f_apply_to_schedule = std::move(f_apply_to_schedule);
250  return *this;
251  }
252 
254  get_mutable()->f_as_python = std::move(f_as_python);
255  return *this;
256  }
257 
259  get_mutable()->f_attrs_as_json = std::move(f_attrs_as_json);
260  return *this;
261  }
262 
264  get_mutable()->f_attrs_from_json = std::move(f_attrs_from_json);
265  return *this;
266  }
267 
268  private:
270  explicit InstructionKindRegEntry(uint32_t reg_index);
272  InstructionKindNode* get_mutable() const {
273  return const_cast<InstructionKindNode*>(inst_kind_.get());
274  }
275 
277  String name;
279  InstructionKind inst_kind_;
280  template <typename, typename>
281  friend class ::tvm::AttrRegistry;
282  friend class InstructionKind;
283 };
284 
285 } // namespace tir
286 } // namespace tvm
287 
288 #endif // TVM_TIR_SCHEDULE_INSTRUCTION_H_
InstructionKindRegEntry & set_attrs_from_json(FInstructionAttrsFromJSON f_attrs_from_json)
Definition: instruction.h:263
Array< ObjectRef > attrs
The attributes of the instruction. Similar to attributes of an operator, attributes of an instruction...
Definition: instruction.h:165
Managed reference to InstructionKindNode.
Definition: instruction.h:132
FInstructionApply f_apply_to_schedule
A functor that applies the instruction to a TensorIR schedule.
Definition: instruction.h:101
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:36
InstructionKindRegEntry & set_name()
Definition: instruction.h:238
InstructionKindRegEntry & set_as_python(FInstructionAsPython f_as_python)
Definition: instruction.h:253
Managed reference to InstructionNode.
Definition: instruction.h:189
String name
The name of a kind of instructions.
Definition: instruction.h:92
base class of all object containers.
Definition: object.h:165
FInstructionAttrsFromJSON f_attrs_from_json
A functor that deserialize its attributes from JSON.
Definition: instruction.h:113
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
Kind of an instruction, e.g. Split, Reorder, etc. Besides the name, every kind of instruction has its...
Definition: instruction.h:89
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:270
InstructionKindRegEntry & set_is_pure(bool is_pure)
Definition: instruction.h:243
InstructionKindRegEntry & set_attrs_as_json(FInstructionAttrsAsJSON f_attrs_as_json)
Definition: instruction.h:258
Reference to string objects.
Definition: string.h:129
FInstructionAttrsAsJSON f_attrs_as_json
A functor that serialize its attributes to JSON.
Definition: instruction.h:108
#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)
Definition: object.h:706
TVM_DECLARE_FINAL_OBJECT_INFO(InstructionKindNode, runtime::Object)
InstructionKind kind
The kind of the instruction.
Definition: instruction.h:147
Base class of all object reference.
Definition: object.h:504
Schedule instructions each corresponds to a schedule primitive.
Definition: instruction.h:144
InstructionKindRegEntry & set_apply_to_schedule(FInstructionApply f_apply_to_schedule)
Definition: instruction.h:248
static constexpr const char * _type_key
Definition: instruction.h:124
Array< ObjectRef > inputs
The input random variables of the instruction, and the type of each element can be one of the followi...
Definition: instruction.h:159
runtime::TypedPackedFunc< Array< ObjectRef >(Schedule sch, const Array< ObjectRef > &inputs, const Array< ObjectRef > &attrs, const Optional< ObjectRef > &decision)> FInstructionApply
Type of the functor that applies the instruction to a TensorIR schedule.
Definition: instruction.h:47
Optional container that to represent to a Nullable variant of T.
Definition: optional.h:51
bool is_pure
Indicates if the instruction is pure, i.e. removing it alone doesn&#39;t mutate the schedule state...
Definition: instruction.h:99
void VisitAttrs(tvm::AttrVisitor *v)
Definition: instruction.h:174
Reflection and serialization of compiler IR/AST nodes.
FInstructionAsPython f_as_python
A functor that converts the instruction to a statement in python syntax.
Definition: instruction.h:103
An entry in the registry of InstructionKind.
Definition: instruction.h:234
void VisitAttrs(tvm::AttrVisitor *v)
Definition: instruction.h:115
Array< ObjectRef > outputs
The output random variables of the instruction, and the type of each element can be one of the follow...
Definition: instruction.h:172