tvm
trace.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_S_TIR_SCHEDULE_TRACE_H_
20 #define TVM_S_TIR_SCHEDULE_TRACE_H_
21 
23 
24 namespace tvm {
25 namespace s_tir {
26 using namespace tvm::tir;
27 
28 // Forward declaration
29 class Trace;
30 
41  ffi::TypedFunction<Any(const Instruction& inst, const ffi::Array<Any>& inputs,
42  const ffi::Array<Any>& attrs, const Any& decision)>;
43 
59 class TraceNode : public runtime::Object {
60  public:
62  ffi::Array<Instruction> insts;
64  ffi::Map<Instruction, Any> decisions;
65 
66  static void RegisterReflection() {
67  namespace refl = tvm::ffi::reflection;
68  refl::ObjectDef<TraceNode>()
69  .def_ro("insts", &TraceNode::insts)
70  .def_ro("decisions", &TraceNode::decisions);
71  }
72 
73  static constexpr const bool _type_mutable = true;
74  TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.Trace", TraceNode, runtime::Object);
75 
76  public:
82  Any GetDecision(const Instruction& inst) const;
87  void Append(Instruction inst);
95  void Append(Instruction inst, Any decision);
100  ffi::Optional<Instruction> Pop();
109  void ApplyToSchedule(Schedule sch, bool remove_postproc,
110  FTraceDecisionProvider decision_provider = nullptr) const;
116  ObjectRef AsJSON(bool remove_postproc) const;
122  ffi::Array<ffi::String> AsPython(bool remove_postproc) const;
131  Trace WithDecision(Instruction inst, Any decision, bool remove_postproc) const;
137  Trace Simplified(bool remove_postproc) const;
138 };
139 
144 class Trace : public runtime::ObjectRef {
145  public:
147  Trace();
153  explicit Trace(ffi::Array<Instruction> insts, ffi::Map<Instruction, Any> decisions);
159  static void ApplyJSONToSchedule(ObjectRef json, Schedule sch);
160 
162 };
163 
164 } // namespace s_tir
165 } // namespace tvm
166 
167 #endif // TVM_S_TIR_SCHEDULE_TRACE_H_
Managed reference to InstructionNode.
Definition: instruction.h:190
Managed reference to ScheduleNode.
Definition: schedule.h:897
An execution trace of a scheduling program.
Definition: trace.h:59
void ApplyToSchedule(Schedule sch, bool remove_postproc, FTraceDecisionProvider decision_provider=nullptr) const
Apply the trace to a TensorIR schedule.
void Append(Instruction inst, Any decision)
Append a new instruction with a random decision to the trace.
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.Trace", TraceNode, runtime::Object)
ffi::Array< Instruction > insts
The instructions invoked so far in the program execution.
Definition: trace.h:62
ObjectRef AsJSON(bool remove_postproc) const
Serialize the trace as a JSON-style object.
Any GetDecision(const Instruction &inst) const
Retrieve the decision made on a specific instruction.
ffi::Array< ffi::String > AsPython(bool remove_postproc) const
Serialize the trace as a sequence of python statements.
void Append(Instruction inst)
Append a new instruction to the trace.
static void RegisterReflection()
Definition: trace.h:66
Trace Simplified(bool remove_postproc) const
Simplify the trace with dead-code elimination.
ffi::Optional< Instruction > Pop()
Remove the last instruction, along with the decision made on that instruction, if any.
ffi::Map< Instruction, Any > decisions
The random decisions made upon those instructions.
Definition: trace.h:64
Trace WithDecision(Instruction inst, Any decision, bool remove_postproc) const
Create a new trace with an instruction whose decision is changed, assuming this instruction exists in...
Managed reference to TraceNode.
Definition: trace.h:144
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(Trace, runtime::ObjectRef, TraceNode)
Trace()
Default constructor. Creating an empty trace.
Trace(ffi::Array< Instruction > insts, ffi::Map< Instruction, Any > decisions)
Constructor. Creating a trace from existing instructions and their decisions.
static void ApplyJSONToSchedule(ObjectRef json, Schedule sch)
Apply a JSON-serialized trace to a TensorIR schedule.
Definition: repr_printer.h:91
ffi::TypedFunction< Any(const Instruction &inst, const ffi::Array< Any > &inputs, const ffi::Array< Any > &attrs, const Any &decision)> FTraceDecisionProvider
A callback that allows users to mutate decisions on the fly when applying instructions....
Definition: trace.h:42
Definition: extracted_task.h:30
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:37