tvm
Loading...
Searching...
No Matches
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
22#include <tvm/ir/prim/expr.h>
24
25namespace tvm {
26namespace s_tir {
27using namespace tvm::prim;
28using namespace tvm::tirx;
29
30// Forward declaration
31class Trace;
32
43 ffi::TypedFunction<Any(const Instruction& inst, const ffi::Array<Any>& inputs,
44 const ffi::Array<Any>& attrs, const Any& decision)>;
45
61class TraceNode : public ffi::Object {
62 public:
64 ffi::Array<Instruction> insts;
66 ffi::Map<Instruction, Any> decisions;
67
68 static void RegisterReflection() {
69 namespace refl = tvm::ffi::reflection;
70 refl::ObjectDef<TraceNode>()
71 .def_ro("insts", &TraceNode::insts)
72 .def_ro("decisions", &TraceNode::decisions);
73 }
74
75 static constexpr const bool _type_mutable = true;
76 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.Trace", TraceNode, ffi::Object);
77
78 public:
102 ffi::Optional<Instruction> Pop();
118 ffi::ObjectRef AsJSON(bool remove_postproc) const;
124 ffi::Array<ffi::String> AsPython(bool remove_postproc) const;
140};
141
146class Trace : public ffi::ObjectRef {
147 public:
155 explicit Trace(ffi::Array<Instruction> insts, ffi::Map<Instruction, Any> decisions);
161 static void ApplyJSONToSchedule(ffi::ObjectRef json, Schedule sch);
162
164};
165
166} // namespace s_tir
167} // namespace tvm
168
169#endif // TVM_S_TIR_SCHEDULE_TRACE_H_
RAII wrapper function to enter and exit a context object similar to python's with syntax.
Definition with_context.h:59
Managed reference to InstructionNode.
Definition instruction.h:191
Managed reference to ScheduleNode.
Definition schedule.h:887
An execution trace of a scheduling program.
Definition trace.h:61
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.
ffi::Array< ffi::String > AsPython(bool remove_postproc) const
Serialize the trace as a sequence of python statements.
ffi::Optional< Instruction > Pop()
Remove the last instruction, along with the decision made on that instruction, if any.
static constexpr const bool _type_mutable
Definition trace.h:75
ffi::Array< Instruction > insts
The instructions invoked so far in the program execution.
Definition trace.h:64
Any GetDecision(const Instruction &inst) const
Retrieve the decision made on a specific instruction.
void Append(Instruction inst)
Append a new instruction to the trace.
static void RegisterReflection()
Definition trace.h:68
Trace Simplified(bool remove_postproc) const
Simplify the trace with dead-code elimination.
ffi::ObjectRef AsJSON(bool remove_postproc) const
Serialize the trace as a JSON-style object.
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.Trace", TraceNode, ffi::Object)
ffi::Map< Instruction, Any > decisions
The random decisions made upon those instructions.
Definition trace.h:66
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:146
Trace()
Default constructor. Creating an empty trace.
static void ApplyJSONToSchedule(ffi::ObjectRef json, Schedule sch)
Apply a JSON-serialized trace to a TensorIR schedule.
Trace(ffi::Array< Instruction > insts, ffi::Map< Instruction, Any > decisions)
Constructor. Creating a trace from existing instructions and their decisions.
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(Trace, ffi::ObjectRef, TraceNode)
TIR expressions.
Definition builtin.h:25
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:44
Definition axis_group_graph.h:39
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition analyzer.h:40