Imported Upstream version 1.4.0
[platform/core/ml/nnfw.git] / runtime / onert / backend / cpu / kernel / ReduceLayer.h
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #ifndef __ONERT_BACKEND_CPU_KERNEL_REDUCESUMLAYER_H__
18 #define __ONERT_BACKEND_CPU_KERNEL_REDUCESUMLAYER_H__
19
20 #include "../operand/Tensor.h"
21
22 #include <exec/IFunction.h>
23 #include <memory>
24
25 namespace nnfw
26 {
27 namespace cker
28 {
29 class Reduce;
30 }
31 } // namespace nnfw
32
33 namespace onert
34 {
35 namespace backend
36 {
37 namespace cpu
38 {
39 namespace kernel
40 {
41
42 enum class ReduceType
43 {
44   kSum,
45   kProd,
46   kMax,
47   kMin,
48   kAny,
49 };
50
51 class ReduceLayer : public ::onert::exec::IFunction
52 {
53 public:
54   ReduceLayer();
55   ~ReduceLayer();
56
57 public:
58   void configure(const operand::Tensor *input, operand::Tensor *output, ReduceType reduceType,
59                  const std::vector<int> &axes, bool keep_dims);
60
61   void run();
62   void runSync()
63   {
64     // this abstract method is used just for profiling and called for
65     // backend::acl_common::AclFunction
66     run();
67   }
68
69 private:
70   const operand::Tensor *_input;
71   operand::Tensor *_output;
72   ReduceType _reduceType;
73   std::vector<int> _axes;
74   bool _keep_dims;
75
76   std::unique_ptr<nnfw::cker::Reduce> _reduce_kernel;
77 };
78
79 } // namespace kernel
80 } // namespace cpu
81 } // namespace backend
82 } // namespace onert
83
84 #endif // __ONERT_BACKEND_CPU_KERNEL_REDUCESUMLAYER_H__