Skip to content

Commit

Permalink
[onert-micro] TISO Header helper for import TISO kernel
Browse files Browse the repository at this point in the history
- TISOHeader helper defined
- apply helper to comparison kernels

ONE-DCO-1.0-Signed-off-by: Chunseok Lee <chunseok.lee@samsung.com>
  • Loading branch information
chunseoklee committed Sep 4, 2024
1 parent b104d9c commit c0364f3
Show file tree
Hide file tree
Showing 10 changed files with 161 additions and 103 deletions.
47 changes: 47 additions & 0 deletions onert-micro/onert-micro/include/import/OMUtils.h
Original file line number Diff line number Diff line change
@@ -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 <cmath>
#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
1 change: 1 addition & 0 deletions onert-micro/onert-micro/src/import/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ set(SOURCES
OMKernelConfiguration.cpp
OMKernelConfigureBuilder.cpp
OMDynamicShapesHandler.cpp
OMUtils.cpp
helpers/OMConfigureSISOKernel.cpp
helpers/OMPadCommon.cpp
helpers/OMConfigureTISOKernel.cpp
Expand Down
66 changes: 66 additions & 0 deletions onert-micro/onert-micro/src/import/OMUtils.cpp
Original file line number Diff line number Diff line change
@@ -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 <cmath>

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;
}
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/Equal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/Greater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/GreaterEqual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/Less.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/LessEqual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
22 changes: 7 additions & 15 deletions onert-micro/onert-micro/src/import/kernels/NotEqual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include "OMStatus.h"
#include "execute/OMRuntimeKernel.h"

#include "import/OMUtils.h"

using namespace onert_micro;
using namespace onert_micro::core;

Expand All @@ -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)
Expand Down
18 changes: 5 additions & 13 deletions onert-micro/onert-micro/src/import/kernels/Softmax.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit c0364f3

Please sign in to comment.