2 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __ONERT_BACKEND_BACKEND_CONTEXT_H__
18 #define __ONERT_BACKEND_BACKEND_CONTEXT_H__
29 class IConstantInitializer;
30 class IKernelGenerator;
31 class ITensorRegister;
32 struct ITensorBuilder;
40 ir::OperationIndex index;
43 OperationInfo(ir::OperationIndex index, ir::Layout layout) : index{index}, layout{layout} {}
47 BackendContext(const Backend *backend, const ir::Graph *graph,
48 std::shared_ptr<ITensorBuilder> tensor_builder = nullptr,
49 std::shared_ptr<IConstantInitializer> constant_initializer = nullptr,
50 std::shared_ptr<IKernelGenerator> kernel_gen = nullptr,
51 std::shared_ptr<ITensorRegister> tensor_register = nullptr,
52 std::shared_ptr<IOptimizer> optimizer = nullptr)
53 : _backend{backend}, _graph{graph}, tensor_builder{tensor_builder},
54 constant_initializer{constant_initializer}, kernel_gen{kernel_gen},
55 tensor_register{tensor_register}, optimizer{optimizer}
59 virtual ~BackendContext() = default;
61 void initialize(const std::vector<OperationInfo> &operation_list,
62 const std::vector<ir::OperandIndex> &operand_list);
65 const Backend *backend() const { return _backend; }
66 const ir::Graph *graph() const { return _graph; }
67 const std::vector<OperationInfo> &operation_list() { return _operation_list; }
68 const std::vector<ir::OperandIndex> &operand_list() { return _operand_list; }
71 const Backend *_backend{nullptr};
72 const ir::Graph *_graph{nullptr};
73 std::vector<OperationInfo> _operation_list;
74 std::vector<ir::OperandIndex> _operand_list;
77 std::shared_ptr<ITensorBuilder> tensor_builder;
78 std::shared_ptr<IConstantInitializer> constant_initializer;
79 std::shared_ptr<IKernelGenerator> kernel_gen;
80 std::shared_ptr<ITensorRegister> tensor_register;
81 std::shared_ptr<IOptimizer> optimizer;
84 using BackendContexts = std::unordered_map<const Backend *, std::unique_ptr<BackendContext>>;
86 } // namespace backend
89 #endif // __ONERT_BACKEND_BACKEND_CONTEXT_H__