ONE - On-device Neural Engine
Loading...
Searching...
No Matches
PALMaxPool2D.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Samsung Electronics Co., Ltd. All Rights Reserved
3 * Copyright 2020 The TensorFlow Authors. All Rights Reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef ONERT_MICRO_EXECUTE_PAL_MAX_POOL_2D_H
19#define ONERT_MICRO_EXECUTE_PAL_MAX_POOL_2D_H
20
21#include "PALMaxPool2DCommon.h"
22
23#include <arm_nnfunctions.h>
24
25namespace onert_micro
26{
27namespace execute
28{
29namespace pal
30{
31
32OMStatus MaxPool(const core::Pool2DParams &params, const core::OMRuntimeShape &input_shape,
33 const int8_t *input_data, const core::OMRuntimeShape &output_shape,
34 int8_t *output_data)
35{
36 cmsis_nn_dims input_dims;
37 cmsis_nn_dims output_dims;
38 cmsis_nn_pool_params pool_params;
39 cmsis_nn_dims filter_dims;
40 cmsis_nn_context ctx;
41
42 const int depth = input_shape.dims(3);
43 const int output_width = output_shape.dims(2);
44
45 input_dims.n = 1;
46 input_dims.h = input_shape.dims(1);
47 input_dims.w = input_shape.dims(2);
48 input_dims.c = depth;
49
50 output_dims.n = 1;
51 output_dims.h = output_shape.dims(1);
52 output_dims.w = output_width;
53 output_dims.c = depth;
54
55 pool_params.stride.h = params.stride_h;
56 pool_params.stride.w = params.stride_w;
57 pool_params.padding.h = params.pad_h;
58 pool_params.padding.w = params.pad_w;
59 pool_params.activation.min = params.quantized_activation_min;
60 pool_params.activation.max = params.quantized_activation_max;
61
62 filter_dims.n = 1;
63 filter_dims.h = params.filter_h;
64 filter_dims.w = params.filter_w;
65 filter_dims.c = 1;
66
67 auto res = arm_max_pool_s8(&ctx, &pool_params, &input_dims, input_data, &filter_dims,
68 &output_dims, output_data);
69
70 assert(res == ARM_CMSIS_NN_SUCCESS);
71 if (res != ARM_CMSIS_NN_SUCCESS)
72 return CmsisNNError;
73
74 return Ok;
75}
76
77} // namespace pal
78} // namespace execute
79} // namespace onert_micro
80
81#endif // ONERT_MICRO_EXECUTE_PAL_MAX_POOL_2D_H
int32_t dims(int i) const
Definition Tensor.h:108
const luci_interpreter::RuntimeShape output_shape
OMStatus MaxPool(const core::Pool2DParams &params, const core::OMRuntimeShape &input_shape, const int8_t *input_data, const core::OMRuntimeShape &output_shape, int8_t *output_data)