tvm
Loading...
Searching...
No Matches
postproc.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
20#ifndef TVM_S_TIR_META_SCHEDULE_POSTPROC_H_
21#define TVM_S_TIR_META_SCHEDULE_POSTPROC_H_
22
23#include <tvm/ffi/function.h>
24#include <tvm/ffi/reflection/registry.h>
25#include <tvm/ir/prim/expr.h>
26#include <tvm/runtime/base.h>
28
29namespace tvm {
30namespace s_tir {
31namespace meta_schedule {
32
33class TuneContext;
34class Postproc;
35
39class PostprocObj : public ffi::Object {
40 public:
42 virtual ~PostprocObj() = default;
43
44 static void RegisterReflection() {
45 namespace refl = tvm::ffi::reflection;
46 refl::ObjectDef<PostprocObj>();
47 }
48
54 virtual void InitializeWithTuneContext(const TuneContext& context) = 0;
55
61 virtual bool Apply(const s_tir::Schedule& sch) = 0;
62
67 virtual Postproc Clone() const = 0;
68
69 static constexpr const bool _type_mutable = true;
70 TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.Postproc", PostprocObj, ffi::Object);
71};
72
77class Postproc : public ffi::ObjectRef {
78 public:
79 explicit Postproc(ffi::UnsafeInit tag, ffi::ObjectPtr<PostprocObj> data) : ffi::ObjectRef(tag) {
80 data_ = std::move(data);
81 }
82
87 using FInitializeWithTuneContext = ffi::TypedFunction<void(const TuneContext&)>;
93 using FApply = ffi::TypedFunction<bool(const s_tir::Schedule&)>;
98 using FClone = ffi::TypedFunction<Postproc()>;
106 TVM_DLL static Postproc PyPostproc(FInitializeWithTuneContext f_initialize_with_tune_context, //
107 FApply f_apply, //
108 FClone f_clone);
141 TVM_DLL static Postproc RewriteUnboundBlock(int max_threadblocks);
148 TVM_DLL static Postproc RewriteTensorize(bool vectorize_init_loop = false);
153 TVM_DLL static Postproc VerifyGPUCode();
158 TVM_DLL static Postproc VerifyVTCMLimit();
164 TVM_DLL static Postproc RewriteLayout();
166 TVM_DLL static ffi::Array<Postproc, void> DefaultLLVM();
168 TVM_DLL static ffi::Array<Postproc, void> DefaultCPUTensorization();
170 TVM_DLL static ffi::Array<Postproc, void> DefaultRISCV();
172 TVM_DLL static ffi::Array<Postproc, void> DefaultCUDA();
174 TVM_DLL static ffi::Array<Postproc, void> DefaultCUDATensorCore();
176 TVM_DLL static ffi::Array<Postproc, void> DefaultHexagon();
177
179};
180
183 public:
193
194 static void RegisterReflection() {
195 // `f_initialize_with_tune_context` is not registered
196 // `f_apply` is not registered
197 // `f_clone` is not registered
198 namespace refl = tvm::ffi::reflection;
199 refl::ObjectDef<PyPostprocObj>();
200 }
201
202 void InitializeWithTuneContext(const TuneContext& context) final;
203 bool Apply(const s_tir::Schedule& sch) final;
204 Postproc Clone() const final;
206};
207
208} // namespace meta_schedule
209} // namespace s_tir
210} // namespace tvm
211
212#endif // TVM_S_TIR_META_SCHEDULE_POSTPROC_H_
Managed reference to ScheduleObj.
Definition schedule.h:887
Rules to apply a postprocessor to a schedule.
Definition postproc.h:39
TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.Postproc", PostprocObj, ffi::Object)
static constexpr const bool _type_mutable
Definition postproc.h:69
virtual Postproc Clone() const =0
Clone the postprocessor.
virtual void InitializeWithTuneContext(const TuneContext &context)=0
Initialize the design space generator with tuning context.
static void RegisterReflection()
Definition postproc.h:44
virtual ~PostprocObj()=default
Virtual destructor.
virtual bool Apply(const s_tir::Schedule &sch)=0
Apply a postprocessor to the given schedule.
Managed reference to PostprocObj.
Definition postproc.h:77
static ffi::Array< Postproc, void > DefaultRISCV()
Create default postprocessors for RISCV.
static Postproc DisallowDynamicLoop()
Create a postprocessor that checks if all loops are static.
static ffi::Array< Postproc, void > DefaultHexagon()
Create default postprocessors for Hexagon.
static Postproc DisallowAsyncStridedMemCopy()
Create a postprocessor that checks if all async mem copies are not strided.
static ffi::Array< Postproc, void > DefaultCUDA()
Create default postprocessors for CUDA.
Postproc(ffi::UnsafeInit tag, ffi::ObjectPtr< PostprocObj > data)
Definition postproc.h:79
ffi::TypedFunction< void(const TuneContext &)> FInitializeWithTuneContext
The function type of InitializeWithTuneContext method.
Definition postproc.h:87
static Postproc RewriteUnboundBlock(int max_threadblocks)
Create a postprocessor that adds thread binding to unbound blocks.
static Postproc RewriteCooperativeFetch()
Create a postprocessor that rewrites the cooperative fetch annotation to actual vectorized cooperativ...
ffi::TypedFunction< bool(const s_tir::Schedule &)> FApply
Apply a postprocessor to the given schedule.
Definition postproc.h:93
static Postproc RewriteReductionBlock()
Create a postprocessor that rewrites reduction block by moving the init block out.
static Postproc PyPostproc(FInitializeWithTuneContext f_initialize_with_tune_context, FApply f_apply, FClone f_clone)
Create a postprocessor with customized methods on the python-side.
static ffi::Array< Postproc, void > DefaultCUDATensorCore()
Create default postprocessors for CUDA with TensorCore.
static Postproc RewriteTensorize(bool vectorize_init_loop=false)
Create a postprocessor that applies tensorization to annotated blocks.
static Postproc VerifyGPUCode()
Creates a postprocessor that verifies if the GPU code is correct.
static Postproc RewriteLayout()
Creates a postprocessor that rewrites the layout of input tensor.
static Postproc RewriteParallelVectorizeUnroll()
Creates a postprocessor that applies parallelization, vectorization and auto unrolling according to t...
static ffi::Array< Postproc, void > DefaultLLVM()
Create default postprocessors for LLVM.
ffi::TypedFunction< Postproc()> FClone
Clone the postprocessor.
Definition postproc.h:98
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(Postproc, ffi::ObjectRef, PostprocObj)
static ffi::Array< Postproc, void > DefaultCPUTensorization()
Create default postprocessors for x86 (AVX512 and VNNI)
static Postproc VerifyVTCMLimit()
Verifies that the VTCM usage of a given schedule is within the provided limit.
The postprocessor with customized methods on the python-side.
Definition postproc.h:182
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.PyPostproc", PyPostprocObj, PostprocObj)
Postproc::FApply FApply
Definition postproc.h:185
bool Apply(const s_tir::Schedule &sch) final
Apply a postprocessor to the given schedule.
Postproc::FInitializeWithTuneContext FInitializeWithTuneContext
Definition postproc.h:184
static void RegisterReflection()
Definition postproc.h:194
void InitializeWithTuneContext(const TuneContext &context) final
Initialize the design space generator with tuning context.
FInitializeWithTuneContext f_initialize_with_tune_context
The packed function to the InitializeWithTuneContext function.
Definition postproc.h:188
FClone f_clone
The packed function to the Clone function.
Definition postproc.h:192
Postproc Clone() const final
Clone the postprocessor.
FApply f_apply
The packed function to the Apply function.
Definition postproc.h:190
Postproc::FClone FClone
Definition postproc.h:186
Managed reference to TuneContextObj.
Definition tune_context.h:99
TIR expressions.
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23