diff --git a/onert-micro/onert-micro/include/pal/mcu/KernelsToBuild.lst b/onert-micro/onert-micro/include/pal/mcu/KernelsToBuild.lst index 836c2a246c8..beaed024405 100644 --- a/onert-micro/onert-micro/include/pal/mcu/KernelsToBuild.lst +++ b/onert-micro/onert-micro/include/pal/mcu/KernelsToBuild.lst @@ -83,6 +83,6 @@ REGISTER_KERNEL(WHILE, While) #/*REGISTER_KERNEL(RESIZE_NEAREST_NEIGHBOR, ResizeNearestNeighbor)*/ REGISTER_KERNEL(RSQRT, Rsqrt) REGISTER_KERNEL(NEG, Neg) -#/*REGISTER_KERNEL(ZEROS_LIKE, ZerosLike)*/ +REGISTER_KERNEL(ZEROS_LIKE, ZerosLike) #/*REGISTER_KERNEL(SQUEEZE, Squeeze)*/ REGISTER_KERNEL(UNPACK, Unpack) diff --git a/onert-micro/onert-micro/include/test_models/zeroslike/FloatZerosLikeKernel.h b/onert-micro/onert-micro/include/test_models/zeroslike/FloatZerosLikeKernel.h new file mode 100644 index 00000000000..237c3967693 --- /dev/null +++ b/onert-micro/onert-micro/include/test_models/zeroslike/FloatZerosLikeKernel.h @@ -0,0 +1,131 @@ +/* + * 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 ONERT_MICRO_TEST_MODELS_FLOAT_ZEROS_LIKE_KERNEL_H +#define ONERT_MICRO_TEST_MODELS_FLOAT_ZEROS_LIKE_KERNEL_H + +#include "TestDataZerosLikeBase.h" + +namespace onert_micro +{ +namespace test_model +{ +namespace zeros_like_float +{ +/* + * ZerosLike Kernel: + * + * Input(1, 8, 8, 4) + * | + * ZerosLike + * | + * Output(1, 8, 8, 4) + */ +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, + 0x28, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 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, 0x5c, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x64, 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, 0x43, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xd4, 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, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 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, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x04, 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, + 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 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 input_data = { + 1.7787564, 13.526123, 14.194824, 10.215213, 6.5696063, 0.32476053, 5.172812, 11.58254, + 1.2253664, 6.448969, 4.818403, 5.173219, 5.2025485, 8.907726, 4.8675847, 9.658814, + 5.3619566, 3.8089416, 2.4607596, 9.53005, 4.313822, 4.409469, 2.5364797, 13.099183, + 5.745605, 11.5468855, 3.1745827, 11.864263, 3.6772785, 9.995764, 7.7593145, 7.6526804, + 6.112807, 5.48038, 3.7828858, 7.090309, 5.489285, 2.3067036, 14.311049, 13.833762, + 12.089778, 12.386912, 11.303204, 14.277523, 11.803083, 6.6585464, 2.7015727, 14.788383, + 12.607371, 9.1037035, 14.309183, 11.836715, 2.358639, 3.6424284, 7.4297013, 2.298006, + 12.073541, 4.2871723, 6.96936, 2.777173, 10.598123, 9.057254, 8.749597, 12.798924, + 5.3618493, 6.4888196, 0.8675639, 1.0193392, 8.820988, 8.71598, 2.3144798, 6.4430947, + 9.2404785, 14.713503, 7.9737625, 14.192959, 7.2330065, 1.4928365, 13.074282, 8.062984, + 2.477071, 1.0175642, 8.497505, 4.331551, 4.4471636, 4.101821, 3.2111287, 7.7156234, + 9.624156, 7.312001, 14.068299, 3.1033943, 5.766773, 0.14364493, 6.7649574, 14.875702, + 8.498291, 4.2673383, 12.381352, 5.6543016, 10.172108, 13.540233, 5.5367966, 8.703237, + 2.8888083, 12.95428, 4.149702, 14.5791, 8.460501, 10.52306, 4.754477, 12.637787, + 4.265919, 12.244986, 7.511471, 6.9737573, 10.677587, 12.313292, 1.9264419, 14.983515, + 12.197964, 9.873872, 2.853508, 8.904088, 11.980053, 12.680642, 14.272312, 6.467417, + 6.7574244, 11.432324, 8.442689, 11.535555, 7.413639, 12.879065, 1.3870583, 11.108672, + 7.102633, 12.837867, 13.467441, 14.339677, 13.595035, 9.505788, 3.3638806, 7.9711785, + 5.9886556, 9.487856, 13.933081, 12.057823, 12.9993105, 4.722163, 0.95726097, 10.479345, + 1.531544, 10.66464, 6.4508915, 6.547761, 10.806489, 12.947966, 14.944827, 6.6092124, + 13.971567, 4.359874, 13.894613, 10.704036, 6.450422, 5.7402406, 1.3440402, 10.858341, + 11.920715, 8.983641, 3.759923, 7.9603405, 13.422217, 14.646154, 11.382288, 11.591205, + 13.14068, 14.599585, 14.313996, 11.4980135, 11.228389, 2.3352063, 0.26753145, 12.255293, + 2.3492632, 13.274841, 3.6202207, 0.5872089, 10.600124, 13.302039, 13.432229, 2.3966095, + 14.03712, 5.0836163, 13.029095, 8.314608, 13.133893, 2.7634015, 4.304786, 7.431993, + 2.6958325, 8.048784, 12.457581, 11.330703, 12.303246, 7.140373, 11.876143, 0.8814453, + 6.90046, 10.70249, 12.065882, 12.265273, 9.0821085, 10.044222, 0.72431827, 14.340595, + 14.978852, 6.455387, 0.76369095, 2.1449616, 6.9374723, 11.827915, 1.2242815, 9.756281, + 8.263249, 4.867419, 2.4891205, 2.9900494, 6.7416954, 6.3161993, 5.616863, 13.482001, + 12.058539, 8.699999, 12.006457, 10.08873, 12.14564, 4.7759733, 10.889552, 6.1692514, + 5.365749, 9.306172, 9.769926, 9.491741, 1.2538989, 2.4900718, 0.6668129, 9.1738, + 13.009842, 11.950754, 6.241434, 5.1960526, 7.8892946, 7.969435, 0.75331974, 8.6089735}; + +const std::vector reference_output_data = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + +} // namespace zeros_like_float + +class TestDataFloatZerosLike : public TestDataZerosLikeBase +{ +public: + TestDataFloatZerosLike() + { + _input_data = zeros_like_float::input_data; + _reference_output_data = zeros_like_float::reference_output_data; + _test_kernel_model_circle = zeros_like_float::test_kernel_model_circle; + } + + ~TestDataFloatZerosLike() override = default; +}; + +} // namespace test_model +} // namespace onert_micro + +#endif // ONERT_MICRO_TEST_MODELS_FLOAT_ZEROS_LIKE_KERNEL_H diff --git a/onert-micro/onert-micro/include/test_models/zeroslike/NegZerosLikeKernel.h b/onert-micro/onert-micro/include/test_models/zeroslike/NegZerosLikeKernel.h new file mode 100644 index 00000000000..c1e3dc4df29 --- /dev/null +++ b/onert-micro/onert-micro/include/test_models/zeroslike/NegZerosLikeKernel.h @@ -0,0 +1,85 @@ +/* + * 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 ONERT_MICRO_TEST_MODELS_NEG_ZEROS_LIKE_KERNEL_H +#define ONERT_MICRO_TEST_MODELS_NEG_ZEROS_LIKE_KERNEL_H + +#include "TestDataZerosLikeBase.h" + +namespace onert_micro +{ +namespace test_model +{ +namespace neg_zeros_like_input_type_mismatch +{ + +/* + * ZerosLike Kernel with input type mismatch (input_type should be equal to output_type): + * + * Input(1, 8, 8, 4) - Float32 + * | + * ZerosLike + * | + * Output(1, 8, 8, 4) - 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, + 0x28, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 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, 0x5c, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x64, 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, 0x43, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 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, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 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, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x04, 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, + 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 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_zeros_like_input_type_mismatch + +class NegTestDataInputMismatchZerosLikeKernel : public NegTestDataBase +{ +public: + NegTestDataInputMismatchZerosLikeKernel() + { + _test_kernel_model_circle = neg_zeros_like_input_type_mismatch::test_kernel_model_circle; + } + + ~NegTestDataInputMismatchZerosLikeKernel() 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_model +} // namespace onert_micro + +#endif // ONERT_MICRO_TEST_MODELS_NEG_ZEROS_LIKE_KERNEL_H diff --git a/onert-micro/onert-micro/include/test_models/zeroslike/TestDataZerosLikeBase.h b/onert-micro/onert-micro/include/test_models/zeroslike/TestDataZerosLikeBase.h new file mode 100644 index 00000000000..263b6d5b657 --- /dev/null +++ b/onert-micro/onert-micro/include/test_models/zeroslike/TestDataZerosLikeBase.h @@ -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 ONERT_MICRO_TEST_MODELS_ZEROS_LIKE_KERNEL_BASE_H +#define ONERT_MICRO_TEST_MODELS_ZEROS_LIKE_KERNEL_BASE_H + +#include "test_models/TestDataBase.h" + +namespace onert_micro +{ +namespace test_model +{ + +template class TestDataZerosLikeBase : public TestDataBase +{ +public: + TestDataZerosLikeBase() = default; + + const unsigned char *get_model_ptr() override final { return _test_kernel_model_circle; } + + const std::vector &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 &get_output_data_by_index(int i) override final + { + assert(i == 0); + return _reference_output_data; + } + +protected: + std::vector _input_data; + std::vector _reference_output_data; + const unsigned char *_test_kernel_model_circle; +}; + +} // namespace test_model +} // namespace onert_micro + +#endif // ONERT_MICRO_TEST_MODELS_ZEROS_LIKE_KERNEL_BASE_H diff --git a/onert-micro/onert-micro/src/execute/kernels/ZerosLike.cpp b/onert-micro/onert-micro/src/execute/kernels/ZerosLike.cpp new file mode 100644 index 00000000000..bca99494079 --- /dev/null +++ b/onert-micro/onert-micro/src/execute/kernels/ZerosLike.cpp @@ -0,0 +1,107 @@ +/* + * 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 "OMStatus.h" + +#include "core/OMUtils.h" + +#include "execute/OMKernelExecutionBuilder.h" +#include "execute/OMRuntimeKernel.h" + +using namespace onert_micro; +using namespace onert_micro::execute; + +namespace +{ + +constexpr uint32_t inputTensorIdx = 0; +constexpr uint32_t outputTensorIdx = 0; + +template void resetZeros(T *out, const int num_elements) +{ + for (int i = 0; i < num_elements; ++i) + { + out[i] = static_cast(0); + } +} + +} // namespace + +namespace onert_micro +{ +namespace execute +{ + +OMStatus execute_kernel_CircleZerosLike(const OMExecuteArgs &execute_args) +{ + core::OMRuntimeContext &runtime_context = execute_args.runtime_context; + core::OMRuntimeStorage &runtime_storage = execute_args.runtime_storage; + uint16_t op_index = execute_args.kernel_index; + + const circle::Tensor *input = nullptr; + uint8_t *output_data = nullptr; + + OMStatus status = Ok; + { + OMRuntimeKernel runtime_kernel; + runtime_kernel.readKernel(op_index, runtime_context); + + input = runtime_kernel.inputs[inputTensorIdx]; + + assert(input != nullptr); + + status = runtime_kernel.getDataFromStorage(op_index, runtime_storage, runtime_context); + if (status != Ok) + return status; + + output_data = runtime_kernel.outputs_data[outputTensorIdx]; + } + + assert(output_data != nullptr); + + core::OMRuntimeShape input_shape(input); + const int flat_size = input_shape.flatSize(); + + switch (input->type()) + { +#ifndef DIS_FLOAT + case circle::TensorType_FLOAT32: + { + resetZeros(core::utils::castOutputData(output_data), flat_size); + } + break; +#endif // DIS_FLOAT +#ifndef DIS_QUANT + case circle::TensorType_INT8: + { + resetZeros(core::utils::castOutputData(output_data), flat_size); + } + break; +#endif // DIS_QUANT + + default: + { + status = UnsupportedType; + assert(false && "Unsupported type."); + break; + } + } + + return status; +} + +} // namespace execute +} // namespace onert_micro diff --git a/onert-micro/onert-micro/src/execute/kernels/tests/ZerosLike.test.cpp b/onert-micro/onert-micro/src/execute/kernels/tests/ZerosLike.test.cpp new file mode 100644 index 00000000000..1079a3b7f28 --- /dev/null +++ b/onert-micro/onert-micro/src/execute/kernels/tests/ZerosLike.test.cpp @@ -0,0 +1,52 @@ +/* + * 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 "execute/OMTestUtils.h" +#include "test_models/zeroslike/FloatZerosLikeKernel.h" +#include "test_models/zeroslike/NegZerosLikeKernel.h" + +namespace onert_micro +{ +namespace execute +{ +namespace testing +{ + +using namespace testing; + +class ZerosLikeTest : public ::testing::Test +{ + // Do nothing +}; + +TEST_F(ZerosLikeTest, Float_P) +{ + onert_micro::test_model::TestDataFloatZerosLike test_data_kernel; + std::vector output_data_vector = + onert_micro::execute::testing::checkKernel(1, &test_data_kernel); + EXPECT_THAT(output_data_vector, test_data_kernel.get_output_data_by_index(0)); +} + +TEST_F(ZerosLikeTest, Wrong_output_type_NEG) +{ + onert_micro::test_model::NegTestDataInputMismatchZerosLikeKernel test_data_kernel; + + EXPECT_DEATH(checkNEGSISOKernel(&test_data_kernel), ""); +} + +} // namespace testing +} // namespace execute +} // namespace onert_micro diff --git a/onert-micro/onert-micro/src/import/kernels/ZerosLike.cpp b/onert-micro/onert-micro/src/import/kernels/ZerosLike.cpp new file mode 100644 index 00000000000..fc396aa460b --- /dev/null +++ b/onert-micro/onert-micro/src/import/kernels/ZerosLike.cpp @@ -0,0 +1,46 @@ +/* + * 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 "OMStatus.h" + +#include "core/OMUtils.h" +#include "import/OMKernelConfigureBuilder.h" +#include "execute/OMRuntimeKernel.h" +#include "import/helpers/OMConfigureSISOKernel.h" + +using namespace onert_micro; +using namespace onert_micro::core; + +namespace +{ + +constexpr uint32_t inputTensorIdx = 0; +constexpr uint32_t outputTensorIdx = 0; + +} // namespace + +namespace onert_micro +{ +namespace import +{ + +OMStatus configure_kernel_CircleZerosLike(const OMConfigureArgs &config_args) +{ + return import::helpers::configure_SISO_kernel(config_args); +} + +} // namespace import +} // namespace onert_micro