-
Notifications
You must be signed in to change notification settings - Fork 158
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[onert-micro] Add float MirrorPad kernels (#11653)
This commit adds float MirrorPad kernels for onert-micro. ONE-DCO-1.0-Signed-off-by: Artem Balyshev <[email protected]> Co-authored-by: Artem Balyshev <[email protected]>
- Loading branch information
1 parent
92504bc
commit 68e525d
Showing
9 changed files
with
457 additions
and
353 deletions.
There are no files selected for viewing
104 changes: 104 additions & 0 deletions
104
...o/luci-interpreter/include/luci_interpreter/test_models/mirror_pad/FloatMirrorPadKernel.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* Copyright (c) 2023 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 LUCI_INTERPRETER_TEST_MODELS_FLOAT_MIRROR_PAD_KERNEL_H | ||
#define LUCI_INTERPRETER_TEST_MODELS_FLOAT_MIRROR_PAD_KERNEL_H | ||
|
||
#include "TestDataMirrorPadBase.h" | ||
|
||
namespace luci_interpreter | ||
{ | ||
namespace test_kernel | ||
{ | ||
namespace mirror_pad_float | ||
{ | ||
/* | ||
* MirrorPad Kernel: | ||
* | ||
* Input(1, 3, 3, 2) | ||
* | | ||
* MirrorPad | ||
* | | ||
* Output(1, 5, 7, 2) | ||
*/ | ||
const unsigned char test_kernel_model_circle[] = { | ||
0x18, 0x00, 0x00, 0x00, 0x43, 0x49, 0x52, 0x30, 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
0x0c, 0x00, 0x08, 0x00, 0x10, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
0x60, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x4c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x00, 0x8c, 0xff, 0xff, 0xff, 0x90, 0xff, 0xff, 0xff, 0x94, 0xff, 0xff, 0xff, | ||
0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, | ||
0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
0x1c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, | ||
0x07, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x00, 0x00, 0x00, | ||
0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x9c, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6f, 0x66, 0x6d, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
0x0c, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, | ||
0x07, 0x00, 0x00, 0x00, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x69, 0x66, 0x6d, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, | ||
0x11, 0x00, 0x00, 0x00, 0x4f, 0x4e, 0x45, 0x2d, 0x74, 0x66, 0x6c, 0x69, 0x74, 0x65, 0x32, 0x63, | ||
0x69, 0x72, 0x63, 0x6c, 0x65, 0x00, 0x00, 0x00}; | ||
|
||
const std::vector<float> input_data = {-91.67193, 92.42922, -34.20932, 31.049513, 82.94563, | ||
-71.50903, 73.466835, 6.7792625, -94.79867, -62.1785, | ||
95.14197, -7.264842, -76.86396, 58.690563, -12.9692545, | ||
77.169426, 52.5776, 62.414425}; | ||
const std::vector<float> reference_output_data = { | ||
95.14197, -7.264842, -94.79867, -62.1785, 73.466835, 6.7792625, -94.79867, -62.1785, | ||
95.14197, -7.264842, -94.79867, -62.1785, 73.466835, 6.7792625, 82.94563, -71.50903, | ||
-34.20932, 31.049513, -91.67193, 92.42922, -34.20932, 31.049513, 82.94563, -71.50903, | ||
-34.20932, 31.049513, -91.67193, 92.42922, 95.14197, -7.264842, -94.79867, -62.1785, | ||
73.466835, 6.7792625, -94.79867, -62.1785, 95.14197, -7.264842, -94.79867, -62.1785, | ||
73.466835, 6.7792625, 52.5776, 62.414425, -12.9692545, 77.169426, -76.86396, 58.690563, | ||
-12.9692545, 77.169426, 52.5776, 62.414425, -12.9692545, 77.169426, -76.86396, 58.690563, | ||
95.14197, -7.264842, -94.79867, -62.1785, 73.466835, 6.7792625, -94.79867, -62.1785, | ||
95.14197, -7.264842, -94.79867, -62.1785, 73.466835, 6.7792625}; | ||
|
||
} // namespace mirror_pad_float | ||
|
||
class TestDataFloatMirrorPad : public TestDataMirrorPadBase<float> | ||
{ | ||
public: | ||
TestDataFloatMirrorPad() | ||
{ | ||
_input_data = mirror_pad_float::input_data; | ||
_reference_output_data = mirror_pad_float::reference_output_data; | ||
_test_kernel_model_circle = mirror_pad_float::test_kernel_model_circle; | ||
} | ||
|
||
~TestDataFloatMirrorPad() override = default; | ||
}; | ||
|
||
} // namespace test_kernel | ||
} // namespace luci_interpreter | ||
|
||
#endif // LUCI_INTERPRETER_TEST_MODELS_FLOAT_MIRROR_PAD_KERNEL_H |
92 changes: 92 additions & 0 deletions
92
...cro/luci-interpreter/include/luci_interpreter/test_models/mirror_pad/NegMirrorPadKernel.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* | ||
* Copyright (c) 2023 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 LUCI_INTERPRETER_TEST_MODELS_NEG_MIRROR_PAD_KERNEL_H | ||
#define LUCI_INTERPRETER_TEST_MODELS_NEG_MIRROR_PAD_KERNEL_H | ||
|
||
#include "luci_interpreter/test_models/TestDataBase.h" | ||
|
||
namespace luci_interpreter | ||
{ | ||
namespace test_kernel | ||
{ | ||
namespace neg_input_output_type_mismatch_mirror_pad_kernel | ||
{ | ||
/* | ||
* MirrorPad Kernel with input output type mismatch: | ||
* | ||
* Input(1, 3, 3, 2) - Float32 | ||
* | | ||
* MirrorPad | ||
* | | ||
* Output(1, 5, 7, 2) - Int32 | ||
*/ | ||
const unsigned char test_kernel_model_circle[] = { | ||
0x18, 0x00, 0x00, 0x00, 0x43, 0x49, 0x52, 0x30, 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
0x0c, 0x00, 0x08, 0x00, 0x10, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, | ||
0x60, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x4c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x00, 0x8c, 0xff, 0xff, 0xff, 0x90, 0xff, 0xff, 0xff, 0x94, 0xff, 0xff, 0xff, | ||
0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, | ||
0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, | ||
0x1c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, | ||
0x07, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x00, 0x00, 0x00, | ||
0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0xd0, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6f, 0x66, 0x6d, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, | ||
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, | ||
0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, | ||
0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x00, | ||
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, | ||
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, | ||
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x69, 0x66, 0x6d, 0x00, | ||
0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, | ||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, | ||
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, | ||
0x00, 0x00, 0x00, 0x64, 0x11, 0x00, 0x00, 0x00, 0x4f, 0x4e, 0x45, 0x2d, 0x74, 0x66, 0x6c, 0x69, | ||
0x74, 0x65, 0x32, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x00, 0x00, 0x00}; | ||
} // namespace neg_input_output_type_mismatch_mirror_pad_kernel | ||
|
||
class NegTestDataInputOutputTypeMismatchMirrorPadKernel : public NegTestDataBase | ||
{ | ||
public: | ||
NegTestDataInputOutputTypeMismatchMirrorPadKernel() | ||
{ | ||
_test_kernel_model_circle = | ||
neg_input_output_type_mismatch_mirror_pad_kernel::test_kernel_model_circle; | ||
} | ||
|
||
~NegTestDataInputOutputTypeMismatchMirrorPadKernel() override = default; | ||
|
||
const unsigned char *get_model_ptr() override final { return _test_kernel_model_circle; } | ||
|
||
protected: | ||
const unsigned char *_test_kernel_model_circle; | ||
}; | ||
|
||
} // namespace test_kernel | ||
} // namespace luci_interpreter | ||
|
||
#endif // LUCI_INTERPRETER_TEST_MODELS_NEG_MIRROR_PAD_KERNEL_H |
60 changes: 60 additions & 0 deletions
60
.../luci-interpreter/include/luci_interpreter/test_models/mirror_pad/TestDataMirrorPadBase.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* | ||
* Copyright (c) 2023 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 LUCI_INTERPRETER_TEST_MODELS_MIRROR_PAD_KERNEL_BASE_H | ||
#define LUCI_INTERPRETER_TEST_MODELS_MIRROR_PAD_KERNEL_BASE_H | ||
|
||
#include "luci_interpreter/test_models/TestDataBase.h" | ||
|
||
namespace luci_interpreter | ||
{ | ||
namespace test_kernel | ||
{ | ||
|
||
template <typename T> class TestDataMirrorPadBase : public TestDataBase<T> | ||
{ | ||
public: | ||
TestDataMirrorPadBase() = default; | ||
|
||
const unsigned char *get_model_ptr() override final { return _test_kernel_model_circle; } | ||
|
||
const std::vector<T> &get_input_data_by_index(int i) override final | ||
{ | ||
switch (i) | ||
{ | ||
case 0: | ||
return _input_data; | ||
default: | ||
assert(false && "Wrong input index"); | ||
} | ||
} | ||
|
||
const std::vector<T> &get_output_data_by_index(int i) override final | ||
{ | ||
assert(i == 0); | ||
return _reference_output_data; | ||
} | ||
|
||
protected: | ||
std::vector<T> _input_data; | ||
std::vector<T> _reference_output_data; | ||
const unsigned char *_test_kernel_model_circle; | ||
}; | ||
|
||
} // namespace test_kernel | ||
} // namespace luci_interpreter | ||
|
||
#endif // LUCI_INTERPRETER_TEST_MODELS_MIRROR_PAD_KERNEL_BASE_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
/* | ||
* Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved | ||
* Copyright 2019 The TensorFlow Authors. 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 LUCI_INTERPRETER_PAL_MIRROR_PAD_COMMON_H | ||
#define LUCI_INTERPRETER_PAL_MIRROR_PAD_COMMON_H | ||
|
||
#include "PALUtils.h" | ||
#include "Params.h" | ||
|
||
namespace luci_interpreter_pal | ||
{ | ||
namespace | ||
{ | ||
|
||
// Helper method that fills the left and right pads. | ||
template <typename T> | ||
inline void getPadding(const T *data, int offset, int64_t *left_pad, int64_t *right_pad) | ||
{ | ||
*left_pad = static_cast<int64_t>(*(data + offset * 2)); | ||
*right_pad = static_cast<int64_t>(*(data + offset * 2 + 1)); | ||
} | ||
|
||
// Given dimension index and the left/right padding. | ||
// Returns the corresponding dimension in the input array. | ||
inline int getInputDimension(int padded_dimension, int left_pad, int right_pad, int input_dim_size, | ||
int offset) | ||
{ | ||
if (padded_dimension < left_pad) | ||
{ | ||
const int original_ind = left_pad + offset - 1; | ||
return original_ind - (std::min(padded_dimension, original_ind - offset)); | ||
} | ||
padded_dimension -= left_pad; | ||
if (padded_dimension >= input_dim_size) | ||
{ | ||
padded_dimension -= input_dim_size; | ||
const int original_ind = input_dim_size - (1 + offset); | ||
return original_ind - std::min(padded_dimension, original_ind); | ||
} | ||
return padded_dimension; | ||
} | ||
|
||
// Given and index in output array, returns the index of the value | ||
// in input array. | ||
int getFlatIndex(int index, int num_dims, const luci_interpreter::DataType padding_matrix_type, | ||
const uint8_t *padding_matrix_data, const int32_t *input_dims, | ||
int *output_dims_num_elements, int *input_dims_num_elements, const int offset) | ||
{ | ||
int flat_index = 0; | ||
int64_t left_pad = 0, right_pad = 0, dimension_index, index_in_input; | ||
|
||
for (int i = 0; i < num_dims; ++i) | ||
{ | ||
switch (padding_matrix_type) | ||
{ | ||
case luci_interpreter::DataType::S32: | ||
getPadding(luci_interpreter::kernels::getTensorData<int32_t>(padding_matrix_data), i, | ||
&left_pad, &right_pad); | ||
break; | ||
case luci_interpreter::DataType::S64: | ||
getPadding(luci_interpreter::kernels::getTensorData<int64_t>(padding_matrix_data), i, | ||
&left_pad, &right_pad); | ||
break; | ||
default: | ||
break; | ||
} | ||
dimension_index = index / output_dims_num_elements[i]; | ||
|
||
index_in_input = getInputDimension(dimension_index, left_pad, right_pad, input_dims[i], offset); | ||
|
||
flat_index += index_in_input * (input_dims_num_elements)[i]; | ||
index %= output_dims_num_elements[i]; | ||
} | ||
|
||
return flat_index; | ||
} | ||
|
||
} // namespace | ||
|
||
template <typename T> | ||
void MirrorPad(const luci_interpreter::DataType padding_matrix_type, | ||
const uint8_t *padding_matrix_data, const int32_t *input_dims, | ||
int *output_dims_num_elements, int *input_dims_num_elements, const T *input_data, | ||
T *output_data, const int offset, const int num_dims, const int output_size) | ||
{ | ||
for (int i = 0; i < output_size; ++i) | ||
{ | ||
output_data[i] = | ||
input_data[getFlatIndex(i, num_dims, padding_matrix_type, padding_matrix_data, input_dims, | ||
output_dims_num_elements, input_dims_num_elements, offset)]; | ||
} | ||
} | ||
|
||
} // namespace luci_interpreter_pal | ||
|
||
#endif // LUCI_INTERPRETER_PAL_MIRROR_PAD_COMMON_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.