tvm
Loading...
Searching...
No Matches
space_generator.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_META_SCHEDULE_SPACE_GENERATOR_H_
20#define TVM_S_TIR_META_SCHEDULE_SPACE_GENERATOR_H_
21
22#include <tvm/ffi/container/array.h>
23#include <tvm/ffi/function.h>
24#include <tvm/ffi/reflection/registry.h>
25#include <tvm/ir/module.h>
26#include <tvm/ir/prim/expr.h>
31#include <tvm/target/target.h>
32
33namespace tvm {
34namespace s_tir {
35using namespace tvm::prim;
36namespace meta_schedule {
37
38// Forward declaration
39class TuneContext;
40class SpaceGenerator;
41
78class SpaceGeneratorNode : public ffi::Object {
79 public:
81 ffi::Optional<ffi::Array<ScheduleRule>> sch_rules;
83 ffi::Optional<ffi::Array<Postproc>> postprocs;
85 ffi::Optional<ffi::Map<Mutator, FloatImm>> mutator_probs;
86
87 static void RegisterReflection() {
88 namespace refl = tvm::ffi::reflection;
89 refl::ObjectDef<SpaceGeneratorNode>()
90 .def_ro("sch_rules", &SpaceGeneratorNode::sch_rules)
91 .def_ro("postprocs", &SpaceGeneratorNode::postprocs)
92 .def_ro("mutator_probs", &SpaceGeneratorNode::mutator_probs);
93 }
94
96 virtual ~SpaceGeneratorNode() = default;
97
104
110 virtual ffi::Array<s_tir::Schedule> GenerateDesignSpace(const IRModule& mod) = 0;
111
116 virtual SpaceGenerator Clone() const = 0;
117
118 static constexpr const bool _type_mutable = true;
119 TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.SpaceGenerator", SpaceGeneratorNode,
120 ffi::Object);
121};
122
127class SpaceGenerator : public ffi::ObjectRef {
128 public:
133 explicit SpaceGenerator(ffi::ObjectPtr<SpaceGeneratorNode> data) : ffi::ObjectRef(data) {
134 TVM_FFI_ICHECK(data != nullptr);
135 }
140 using FInitializeWithTuneContext = ffi::TypedFunction<void(const TuneContext&)>;
146 using FGenerateDesignSpace = ffi::TypedFunction<ffi::Array<s_tir::Schedule>(const IRModule&)>;
151 using FClone = ffi::TypedFunction<SpaceGenerator()>;
152
153 protected:
154 SpaceGenerator() = default;
155
156 public:
168 ffi::Optional<ffi::Array<ScheduleRule>> sch_rules,
169 ffi::Optional<ffi::Array<Postproc>> postprocs,
170 ffi::Optional<ffi::Map<Mutator, FloatImm>> mutator_probs,
171 FInitializeWithTuneContext f_initialize_with_tune_context,
172 FGenerateDesignSpace f_generate_design_space, FClone f_clone);
184 ffi::Function schedule_fn, ffi::Optional<ffi::Array<ScheduleRule>> sch_rules,
185 ffi::Optional<ffi::Array<Postproc>> postprocs,
186 ffi::Optional<ffi::Map<Mutator, FloatImm>> mutator_probs);
196 ffi::Array<SpaceGenerator, void> space_generators,
197 ffi::Optional<ffi::Array<ScheduleRule>> sch_rules,
198 ffi::Optional<ffi::Array<Postproc>> postprocs,
199 ffi::Optional<ffi::Map<Mutator, FloatImm>> mutator_probs);
210 ffi::Function f_block_filter, ffi::Optional<ffi::Array<ScheduleRule>> sch_rules,
211 ffi::Optional<ffi::Array<Postproc>> postprocs,
212 ffi::Optional<ffi::Map<Mutator, FloatImm>> mutator_probs);
214};
215
218 public:
228
229 static void RegisterReflection() {
230 // `f_initialize_with_tune_context` is not registered
231 // `f_generate_design_space` is not registered
232 // `f_clone` is not registered
233 namespace refl = tvm::ffi::reflection;
234 refl::ObjectDef<PySpaceGeneratorNode>();
235 }
236
238 ffi::Array<s_tir::Schedule> GenerateDesignSpace(const IRModule& mod) final;
240 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.PySpaceGenerator", PySpaceGeneratorNode,
242};
243
244} // namespace meta_schedule
245} // namespace s_tir
246} // namespace tvm
247
248#endif // TVM_S_TIR_META_SCHEDULE_SPACE_GENERATOR_H_
Managed reference class to IRModuleNode.
Definition module.h:255
RAII wrapper function to enter and exit a context object similar to python's with syntax.
Definition with_context.h:59
The design space generator with customized methods on the python-side.
Definition space_generator.h:217
void InitializeWithTuneContext(const TuneContext &context) final
Initialize the design space generator with tuning context.
SpaceGenerator::FClone FClone
Definition space_generator.h:221
FInitializeWithTuneContext f_initialize_with_tune_context
The packed function to the InitializeWithTuneContext function.
Definition space_generator.h:223
FClone f_clone
The packed function to the Clone function.
Definition space_generator.h:227
SpaceGenerator::FInitializeWithTuneContext FInitializeWithTuneContext
Definition space_generator.h:219
ffi::Array< s_tir::Schedule > GenerateDesignSpace(const IRModule &mod) final
Generate design spaces given a module.
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.PySpaceGenerator", PySpaceGeneratorNode, SpaceGeneratorNode)
SpaceGenerator::FGenerateDesignSpace FGenerateDesignSpace
Definition space_generator.h:220
SpaceGenerator Clone() const final
Clone the space generator.
FGenerateDesignSpace f_generate_design_space
The packed function to the GenerateDesignSpace function.
Definition space_generator.h:225
static void RegisterReflection()
Definition space_generator.h:229
The abstract class for design space generation.
Definition space_generator.h:78
TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.SpaceGenerator", SpaceGeneratorNode, ffi::Object)
static constexpr const bool _type_mutable
Definition space_generator.h:118
ffi::Optional< ffi::Map< Mutator, FloatImm > > mutator_probs
The probability of using certain mutator.
Definition space_generator.h:85
virtual ffi::Array< s_tir::Schedule > GenerateDesignSpace(const IRModule &mod)=0
Generate design spaces given a module.
virtual ~SpaceGeneratorNode()=default
Default destructor.
static void RegisterReflection()
Definition space_generator.h:87
ffi::Optional< ffi::Array< ScheduleRule > > sch_rules
The schedule rules.
Definition space_generator.h:81
ffi::Optional< ffi::Array< Postproc > > postprocs
The postprocessors.
Definition space_generator.h:83
virtual void InitializeWithTuneContext(const TuneContext &context)
Initialize the design space generator with tuning context.
virtual SpaceGenerator Clone() const =0
Clone the space generator.
Managed reference to SpaceGeneratorNode.
Definition space_generator.h:127
static SpaceGenerator SpaceGeneratorUnion(ffi::Array< SpaceGenerator, void > space_generators, ffi::Optional< ffi::Array< ScheduleRule > > sch_rules, ffi::Optional< ffi::Array< Postproc > > postprocs, ffi::Optional< ffi::Map< Mutator, FloatImm > > mutator_probs)
Create a design space generator that is union of multiple design space generators.
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(SpaceGenerator, ffi::ObjectRef, SpaceGeneratorNode)
ffi::TypedFunction< SpaceGenerator()> FClone
The function type of Clone method.
Definition space_generator.h:151
ffi::TypedFunction< void(const TuneContext &)> FInitializeWithTuneContext
The function type of InitializeWithTuneContext method.
Definition space_generator.h:140
static SpaceGenerator PySpaceGenerator(ffi::Optional< ffi::Array< ScheduleRule > > sch_rules, ffi::Optional< ffi::Array< Postproc > > postprocs, ffi::Optional< ffi::Map< Mutator, FloatImm > > mutator_probs, FInitializeWithTuneContext f_initialize_with_tune_context, FGenerateDesignSpace f_generate_design_space, FClone f_clone)
Create a design space generator with customized methods on the python-side.
static SpaceGenerator ScheduleFn(ffi::Function schedule_fn, ffi::Optional< ffi::Array< ScheduleRule > > sch_rules, ffi::Optional< ffi::Array< Postproc > > postprocs, ffi::Optional< ffi::Map< Mutator, FloatImm > > mutator_probs)
Create a design space generator with customized schedule function.
ffi::TypedFunction< ffi::Array< s_tir::Schedule >(const IRModule &)> FGenerateDesignSpace
The function type of GenerateDesignSpace method.
Definition space_generator.h:146
SpaceGenerator(ffi::ObjectPtr< SpaceGeneratorNode > data)
Constructor from ffi::ObjectPtr<SpaceGeneratorNode>.
Definition space_generator.h:133
static SpaceGenerator PostOrderApply(ffi::Function f_block_filter, ffi::Optional< ffi::Array< ScheduleRule > > sch_rules, ffi::Optional< ffi::Array< Postproc > > postprocs, ffi::Optional< ffi::Map< Mutator, FloatImm > > mutator_probs)
Create a design space generator that generates design spaces by applying schedule rules to blocks in ...
Managed reference to TuneContextNode.
Definition tune_context.h:101
TIR expressions.
IRModule that holds the functions and type definitions.
Definition builtin.h:25
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition analyzer.h:40
Compilation target object.