From 0ea8ffd5527ceec1c7ad145cef17deaed2fca59f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Prasanna=20R/System=20SW=20/SRI-Bangalore/Engineer/?= =?utf8?q?=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Thu, 18 Oct 2018 11:42:12 +0530 Subject: [PATCH] Separate Declaration and Definition of SimpleCastLayer. (#3191) This patch separates the declaration and definition of functions in SimpleCastLayer. Purpose: Impose uniformity and better organization. Signed-off-by: prasannar --- .../src/internal/layers/SimpleCastLayer.cc | 79 ++++++++++++++++++++++ .../src/internal/layers/SimpleCastLayer.h | 66 ++---------------- 2 files changed, 84 insertions(+), 61 deletions(-) create mode 100644 runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.cc diff --git a/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.cc b/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.cc new file mode 100644 index 0000000..7c7706a --- /dev/null +++ b/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.cc @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2018 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 "internal/layers/SimpleCastLayer.h" + +#include + +void SimpleCastLayer::castData(::arm_compute::ITensor *in, ::arm_compute::ITensor *out, + const arm_compute::Coordinates &id) +{ + switch (in->info()->data_type()) + { + case ::arm_compute::DataType::F32: + { + copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); + break; + } + case ::arm_compute::DataType::S32: + { + copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); + break; + } + case ::arm_compute::DataType::U32: + { + copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); + break; + } + case ::arm_compute::DataType::QASYMM8: + { + const uint8_t quantizedValue = *(in->ptr_to_element(id)); + copyCast(in->info()->quantization_info().dequantize(quantizedValue), out, id); + break; + } + default: + throw std::runtime_error("Not supported, yet"); + break; + } +} + +void SimpleCastLayer::configure(::arm_compute::ITensor *in, ::arm_compute::ITensor *out) +{ + _in = in; + _out = out; +} + +void SimpleCastLayer::run(void) +{ + if (::internal::arm_compute::isGpuMode()) + { + auto &q = ::arm_compute::CLScheduler::get().queue(); + CAST_CL(_in)->map(q); + CAST_CL(_out)->map(q); + } + + arm_compute::Window window; + window.use_tensor_dimensions(_out->info()->tensor_shape()); + + execute_window_loop(window, + [this](const arm_compute::Coordinates &id) { castData(_in, _out, id); }); + + if (::internal::arm_compute::isGpuMode()) + { + auto &q = ::arm_compute::CLScheduler::get().queue(); + CAST_CL(_out)->unmap(q); + CAST_CL(_in)->unmap(q); + } +} diff --git a/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.h b/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.h index 38e770a..9149da2 100644 --- a/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.h +++ b/runtimes/pure_arm_compute/src/internal/layers/SimpleCastLayer.h @@ -20,7 +20,7 @@ #include #include "internal/arm_compute.h" -#include "internal/op/Cast.h" +#include "internal/arm_compute/Cast.h" class SimpleCastLayer : public ::arm_compute::IFunction { @@ -30,70 +30,14 @@ public: // DO NOTHING } -public: - void configure(::arm_compute::ITensor *in, ::arm_compute::ITensor *out) - { - _in = in; - _out = out; - } - -public: - void run(void) override - { - if (::internal::arm_compute::isGpuMode()) - { - auto &q = ::arm_compute::CLScheduler::get().queue(); - CAST_CL(_in)->map(q); - CAST_CL(_out)->map(q); - } - - arm_compute::Window window; - window.use_tensor_dimensions(_out->info()->tensor_shape()); + void configure(::arm_compute::ITensor *in, ::arm_compute::ITensor *out); - execute_window_loop(window, - [this](const arm_compute::Coordinates &id) { castData(_in, _out, id); }); - - if (::internal::arm_compute::isGpuMode()) - { - auto &q = ::arm_compute::CLScheduler::get().queue(); - CAST_CL(_out)->unmap(q); - CAST_CL(_in)->unmap(q); - } - } + void run(void) override; +private: void castData(::arm_compute::ITensor *in, ::arm_compute::ITensor *out, - const arm_compute::Coordinates &id) - { - switch (in->info()->data_type()) - { - case ::arm_compute::DataType::F32: - { - copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); - break; - } - case ::arm_compute::DataType::S32: - { - copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); - break; - } - case ::arm_compute::DataType::U32: - { - copyCast(*reinterpret_cast(in->ptr_to_element(id)), out, id); - break; - } - case ::arm_compute::DataType::QASYMM8: - { - const uint8_t quantizedValue = *(in->ptr_to_element(id)); - copyCast(in->info()->quantization_info().dequantize(quantizedValue), out, id); - break; - } - default: - throw std::runtime_error("Not supported, yet"); - break; - } - } + const arm_compute::Coordinates &id); -private: ::arm_compute::ITensor *_in; ::arm_compute::ITensor *_out; }; -- 2.7.4