From c0364f37a02a333e015e98fe9bd6ab4cb32eb363 Mon Sep 17 00:00:00 2001 From: Chunseok Lee Date: Wed, 4 Sep 2024 11:01:49 +0900 Subject: [PATCH] [onert-micro] TISO Header helper for import TISO kernel - TISOHeader helper defined - apply helper to comparison kernels ONE-DCO-1.0-Signed-off-by: Chunseok Lee --- .../onert-micro/include/import/OMUtils.h | 47 +++++++++++++ .../onert-micro/src/import/CMakeLists.txt | 1 + .../onert-micro/src/import/OMUtils.cpp | 66 +++++++++++++++++++ .../onert-micro/src/import/kernels/Equal.cpp | 22 ++----- .../src/import/kernels/Greater.cpp | 22 ++----- .../src/import/kernels/GreaterEqual.cpp | 22 ++----- .../onert-micro/src/import/kernels/Less.cpp | 22 ++----- .../src/import/kernels/LessEqual.cpp | 22 ++----- .../src/import/kernels/NotEqual.cpp | 22 ++----- .../src/import/kernels/Softmax.cpp | 18 ++--- 10 files changed, 161 insertions(+), 103 deletions(-) create mode 100644 onert-micro/onert-micro/include/import/OMUtils.h create mode 100644 onert-micro/onert-micro/src/import/OMUtils.cpp diff --git a/onert-micro/onert-micro/include/import/OMUtils.h b/onert-micro/onert-micro/include/import/OMUtils.h new file mode 100644 index 00000000000..bd7224f3ced --- /dev/null +++ b/onert-micro/onert-micro/include/import/OMUtils.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ONERT_MICRO_IMPORT_UTILS_H +#define ONERT_MICRO_IMPORT_UTILS_H + +#include +#include "OMStatus.h" +#include "core/reader/OMCircleReader.h" +#include "core/OMRuntimeShape.h" +#include "core/OMKernelData.h" + +#include "import/OMKernelConfigureBuilder.h" + +// FIXME: this dependancy +#include "execute/OMKernelExecutionBuilder.h" +#include "execute/OMRuntimeKernel.h" + +namespace onert_micro +{ +namespace import +{ + +OMStatus SISOHeader(const OMConfigureArgs &execute_args, const circle::Tensor **input, + const circle::Tensor **output); + +OMStatus TISOHeader(const OMConfigureArgs &execute_args, const circle::Tensor **input1, + const circle::Tensor **input2, const circle::Tensor **output); + + +} // namespace execute +} // namespace onert_micro + +#endif // ONERT_MICRO_IMPORT_UTILS_H diff --git a/onert-micro/onert-micro/src/import/CMakeLists.txt b/onert-micro/onert-micro/src/import/CMakeLists.txt index 5eebbde7a6a..ad879c0f140 100644 --- a/onert-micro/onert-micro/src/import/CMakeLists.txt +++ b/onert-micro/onert-micro/src/import/CMakeLists.txt @@ -5,6 +5,7 @@ set(SOURCES OMKernelConfiguration.cpp OMKernelConfigureBuilder.cpp OMDynamicShapesHandler.cpp + OMUtils.cpp helpers/OMConfigureSISOKernel.cpp helpers/OMPadCommon.cpp helpers/OMConfigureTISOKernel.cpp diff --git a/onert-micro/onert-micro/src/import/OMUtils.cpp b/onert-micro/onert-micro/src/import/OMUtils.cpp new file mode 100644 index 00000000000..49d931d5f77 --- /dev/null +++ b/onert-micro/onert-micro/src/import/OMUtils.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2024 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "import/OMUtils.h" +#include + +using namespace onert_micro::execute; +using namespace onert_micro; + +OMStatus onert_micro::import::SISOHeader(const OMConfigureArgs &execute_args, + const circle::Tensor **input, + const circle::Tensor **output) +{ + OMStatus status; + + core::OMRuntimeContext &runtime_context = execute_args.runtime_context; + core::OMRuntimeStorage &runtime_storage = execute_args.runtime_storage; + uint16_t op_index = execute_args.kernel_index; + + OMRuntimeKernel runtime_kernel; + status = runtime_kernel.readKernel(op_index, runtime_context); + + *input = runtime_kernel.inputs[0]; + *output = runtime_kernel.outputs[0]; + + assert(*input != nullptr); + assert(*output != nullptr); + + return status; +} + +OMStatus onert_micro::import::TISOHeader(const OMConfigureArgs &execute_args, const circle::Tensor **input1, + const circle::Tensor **input2, const circle::Tensor **output) +{ + OMStatus status; + + core::OMRuntimeContext &runtime_context = execute_args.runtime_context; + core::OMRuntimeStorage &runtime_storage = execute_args.runtime_storage; + uint16_t op_index = execute_args.kernel_index; + + OMRuntimeKernel runtime_kernel; + status = runtime_kernel.readKernel(op_index, runtime_context); + + *input2 = runtime_kernel.inputs[0]; + *input1 = runtime_kernel.inputs[1]; + *output = runtime_kernel.outputs[0]; + + assert(*input1 != nullptr); + assert(*input2 != nullptr); + assert(*output != nullptr); + + return status; +} diff --git a/onert-micro/onert-micro/src/import/kernels/Equal.cpp b/onert-micro/onert-micro/src/import/kernels/Equal.cpp index 46fa2d70065..29fc6369d52 100644 --- a/onert-micro/onert-micro/src/import/kernels/Equal.cpp +++ b/onert-micro/onert-micro/src/import/kernels/Equal.cpp @@ -20,6 +20,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -34,23 +36,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleEqual(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/Greater.cpp b/onert-micro/onert-micro/src/import/kernels/Greater.cpp index e15360e1858..8dda286aa2c 100644 --- a/onert-micro/onert-micro/src/import/kernels/Greater.cpp +++ b/onert-micro/onert-micro/src/import/kernels/Greater.cpp @@ -19,6 +19,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -33,23 +35,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleGreater(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/GreaterEqual.cpp b/onert-micro/onert-micro/src/import/kernels/GreaterEqual.cpp index 21c3e2279b2..e898f2cfbea 100644 --- a/onert-micro/onert-micro/src/import/kernels/GreaterEqual.cpp +++ b/onert-micro/onert-micro/src/import/kernels/GreaterEqual.cpp @@ -19,6 +19,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -34,23 +36,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleGreaterEqual(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/Less.cpp b/onert-micro/onert-micro/src/import/kernels/Less.cpp index 6912eab0c77..ae3cfdb5b65 100644 --- a/onert-micro/onert-micro/src/import/kernels/Less.cpp +++ b/onert-micro/onert-micro/src/import/kernels/Less.cpp @@ -19,6 +19,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -33,23 +35,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleLess(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/LessEqual.cpp b/onert-micro/onert-micro/src/import/kernels/LessEqual.cpp index cb0fc8ae9db..72b8bb26fea 100644 --- a/onert-micro/onert-micro/src/import/kernels/LessEqual.cpp +++ b/onert-micro/onert-micro/src/import/kernels/LessEqual.cpp @@ -19,6 +19,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -33,23 +35,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleLessEqual(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/NotEqual.cpp b/onert-micro/onert-micro/src/import/kernels/NotEqual.cpp index 66d70725ebd..a9506a4bcaf 100644 --- a/onert-micro/onert-micro/src/import/kernels/NotEqual.cpp +++ b/onert-micro/onert-micro/src/import/kernels/NotEqual.cpp @@ -20,6 +20,8 @@ #include "OMStatus.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" + using namespace onert_micro; using namespace onert_micro::core; @@ -34,23 +36,13 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleNotEqual(const OMConfigureArgs &config_args) { + const circle::Tensor *input1; + const circle::Tensor *input2; + const circle::Tensor *output; - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; - - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input1 = runtime_kernel.inputs[input1TensorIdx]; - const circle::Tensor *input2 = runtime_kernel.inputs[input2TensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; + TISOHeader(config_args, &input1, &input2, &output); - assert(input1 != nullptr); - assert(input2 != nullptr); - assert(output != nullptr); + OMStatus status; status = utils::checkCondition(input1->type() == input2->type()); if (status != Ok) diff --git a/onert-micro/onert-micro/src/import/kernels/Softmax.cpp b/onert-micro/onert-micro/src/import/kernels/Softmax.cpp index 4592d547927..71c3a936da0 100644 --- a/onert-micro/onert-micro/src/import/kernels/Softmax.cpp +++ b/onert-micro/onert-micro/src/import/kernels/Softmax.cpp @@ -21,6 +21,7 @@ #include "import/OMKernelConfigureBuilder.h" #include "execute/OMRuntimeKernel.h" +#include "import/OMUtils.h" using namespace onert_micro; using namespace onert_micro::core; @@ -35,21 +36,12 @@ constexpr uint32_t outputTensorIdx = 0; OMStatus onert_micro::import::configure_kernel_CircleSoftmax(const OMConfigureArgs &config_args) { - OMRuntimeContext &runtime_context = config_args.runtime_context; - uint16_t op_index = config_args.kernel_index; + const circle::Tensor *input; + const circle::Tensor *output; - onert_micro::execute::OMRuntimeKernel runtime_kernel; - - OMStatus status = runtime_kernel.readKernel(op_index, runtime_context); - if (status != Ok) - return status; - - const circle::Tensor *input = runtime_kernel.inputs[inputTensorIdx]; - const circle::Tensor *output = runtime_kernel.outputs[outputTensorIdx]; - - assert(input != nullptr); - assert(output != nullptr); + SISOHeader(config_args, &input, &output); + OMStatus status; status = utils::checkCondition(input->type() == output->type()); if (status != Ok) return status;