tvm
Loading...
Searching...
No Matches
builder.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_BUILDER_H_
20#define TVM_S_TIR_META_SCHEDULE_BUILDER_H_
21
22#include <tvm/ffi/container/array.h>
23#include <tvm/ffi/container/map.h>
24#include <tvm/ffi/function.h>
25#include <tvm/ffi/optional.h>
26#include <tvm/ffi/reflection/registry.h>
27#include <tvm/ffi/string.h>
28#include <tvm/ir/module.h>
29#include <tvm/ir/prim/expr.h>
30#include <tvm/runtime/tensor.h>
31#include <tvm/target/target.h>
32
33namespace tvm {
34namespace s_tir {
35namespace meta_schedule {
36
38class BuilderInputObj : public ffi::Object {
39 public:
40 explicit BuilderInputObj(ffi::UnsafeInit tag) : target(tag) {}
41
42 explicit BuilderInputObj(Target target) : target(std::move(target)) {}
48 ffi::Optional<ffi::Map<ffi::String, ffi::Tensor>> params;
49
50 static void RegisterReflection() {
51 namespace refl = tvm::ffi::reflection;
52 refl::ObjectDef<BuilderInputObj>()
53 .def_ro("mod", &BuilderInputObj::mod)
54 .def_ro("target", &BuilderInputObj::target)
55 .def_ro("params", &BuilderInputObj::params);
56 }
57 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.BuilderInput", BuilderInputObj,
58 ffi::Object);
59};
60
65class BuilderInput : public ffi::ObjectRef {
66 public:
73 TVM_DLL explicit BuilderInput(
74 IRModule mod, Target target,
75 ffi::Optional<ffi::Map<ffi::String, ffi::Tensor>> params = std::nullopt);
77};
78
80class BuilderResultObj : public ffi::Object {
81 public:
83 ffi::Optional<ffi::String> artifact_path;
85 ffi::Optional<ffi::String> error_msg;
86
87 static void RegisterReflection() {
88 namespace refl = tvm::ffi::reflection;
89 refl::ObjectDef<BuilderResultObj>()
90 .def_ro("artifact_path", &BuilderResultObj::artifact_path)
91 .def_ro("error_msg", &BuilderResultObj::error_msg);
92 }
93 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.BuilderResult", BuilderResultObj,
94 ffi::Object);
95};
96
101class BuilderResult : public ffi::ObjectRef {
102 public:
108 TVM_DLL explicit BuilderResult(ffi::Optional<ffi::String> artifact_path,
109 ffi::Optional<ffi::String> error_msg);
111};
112
114class BuilderObj : public ffi::Object {
115 public:
117 virtual ~BuilderObj() = default;
123 virtual ffi::Array<BuilderResult> Build(const ffi::Array<BuilderInput>& build_inputs) = 0;
129 using FBuild = ffi::TypedFunction<ffi::Array<BuilderResult>(const ffi::Array<BuilderInput>&)>;
130
131 static constexpr const bool _type_mutable = true;
132 TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.Builder", BuilderObj, ffi::Object);
133};
134
139class Builder : public ffi::ObjectRef {
140 public:
145 explicit Builder(ffi::ObjectPtr<BuilderObj> data) : ffi::ObjectRef(data) {
146 TVM_FFI_ICHECK(data != nullptr);
147 }
155};
156
158class PyBuilderObj : public BuilderObj {
159 public:
162
163 static void RegisterReflection() {
164 namespace refl = tvm::ffi::reflection;
165 refl::ObjectDef<PyBuilderObj>().def_ro("f_build", &PyBuilderObj::f_build);
166 }
167
168 ffi::Array<BuilderResult> Build(const ffi::Array<BuilderInput>& build_inputs) final {
169 TVM_FFI_ICHECK(f_build != nullptr) << "PyBuilder's Build method not implemented!";
170 return f_build(build_inputs);
171 }
173};
174
175} // namespace meta_schedule
176} // namespace s_tir
177} // namespace tvm
178
179#endif // TVM_S_TIR_META_SCHEDULE_BUILDER_H_
Managed reference class to IRModuleNode.
Definition module.h:255
Managed reference class to TargetObj.
Definition target.h:136
The builder's input, containing an IRModule and the target.
Definition builder.h:38
ffi::Optional< ffi::Map< ffi::String, ffi::Tensor > > params
Parameters for Relax build module.
Definition builder.h:48
IRModule mod
The IRModule to be built.
Definition builder.h:44
Target target
The target to be built for.
Definition builder.h:46
BuilderInputObj(Target target)
Definition builder.h:42
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.BuilderInput", BuilderInputObj, ffi::Object)
BuilderInputObj(ffi::UnsafeInit tag)
Definition builder.h:40
static void RegisterReflection()
Definition builder.h:50
Managed reference to BuilderInputObj.
Definition builder.h:65
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(BuilderInput, ffi::ObjectRef, BuilderInputObj)
BuilderInput(IRModule mod, Target target, ffi::Optional< ffi::Map< ffi::String, ffi::Tensor > > params=std::nullopt)
Constructor of BuilderInput.
The abstract builder interface.
Definition builder.h:114
virtual ffi::Array< BuilderResult > Build(const ffi::Array< BuilderInput > &build_inputs)=0
Generate the build results from build inputs.
static constexpr const bool _type_mutable
Definition builder.h:131
virtual ~BuilderObj()=default
Default destructor.
TVM_FFI_DECLARE_OBJECT_INFO("s_tir.meta_schedule.Builder", BuilderObj, ffi::Object)
ffi::TypedFunction< ffi::Array< BuilderResult >(const ffi::Array< BuilderInput > &)> FBuild
The function type of Build method.
Definition builder.h:129
The builder's output, containing the artifact path or error message if any.
Definition builder.h:80
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.BuilderResult", BuilderResultObj, ffi::Object)
ffi::Optional< ffi::String > artifact_path
The path to the built artifact.
Definition builder.h:83
static void RegisterReflection()
Definition builder.h:87
ffi::Optional< ffi::String > error_msg
The error message if any.
Definition builder.h:85
Managed reference to BuilderResultObj.
Definition builder.h:101
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(BuilderResult, ffi::ObjectRef, BuilderResultObj)
BuilderResult(ffi::Optional< ffi::String > artifact_path, ffi::Optional< ffi::String > error_msg)
Constructor of BuilderResult.
Managed reference to BuilderObj.
Definition builder.h:139
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(Builder, ffi::ObjectRef, BuilderObj)
static Builder PyBuilder(BuilderObj::FBuild f_build)
Create a builder with customized build method on the python-side.
Builder(ffi::ObjectPtr< BuilderObj > data)
Constructor from ffi::ObjectPtr<BuilderObj>.
Definition builder.h:145
An abstract builder with customized build method on the python-side.
Definition builder.h:158
ffi::Array< BuilderResult > Build(const ffi::Array< BuilderInput > &build_inputs) final
Generate the build results from build inputs.
Definition builder.h:168
static void RegisterReflection()
Definition builder.h:163
FBuild f_build
The packed function to the Build function.
Definition builder.h:161
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("s_tir.meta_schedule.PyBuilder", PyBuilderObj, BuilderObj)
TIR expressions.
IRModule that holds the functions and type definitions.
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23
Device-independent tensor allocation, copies, views and serialization.
Compilation target object.