diff options
Diffstat (limited to 'runtimes/neurun/src/kernel/cpu/TensorConvertFromCommonLayer.cc')
-rw-r--r-- | runtimes/neurun/src/kernel/cpu/TensorConvertFromCommonLayer.cc | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/runtimes/neurun/src/kernel/cpu/TensorConvertFromCommonLayer.cc b/runtimes/neurun/src/kernel/cpu/TensorConvertFromCommonLayer.cc new file mode 100644 index 000000000..00e914732 --- /dev/null +++ b/runtimes/neurun/src/kernel/cpu/TensorConvertFromCommonLayer.cc @@ -0,0 +1,90 @@ +/* + * 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. + */ + +// +// THIS FILE IS UNUSED BUT LEFT FOR FUTURE REFERNCE +// + +#if 0 + +#include "TensorConvertFromCommonLayer.h" + +#include "internal/nnapi/feature/Reader.h" +#include "internal/nnapi/feature/View.h" + +#include <util/feature/IndexIterator.h> + +namespace neurun +{ +namespace kernel +{ +namespace cpu +{ + +bool TensorConvertFromCommonLayer::convert() +{ + auto inputBuffer = _inputTensor->buffer(); + auto inputSize = _inputTensor->info()->total_size(); + + auto outputBuffer = _outputTensor->buffer(); + auto outputSize = _outputTensor->info()->total_size(); + + if (_tensorShape.rank() == 2) + { + const auto len = _tensorShape.dim(1); + + auto base = reinterpret_cast<const float *>(inputBuffer); + + for (int32_t n = 0; n < len; ++n) + { + auto from = base + n; + auto into = + reinterpret_cast<float *>(_outputTensor->ptr_to_element(::arm_compute::Coordinates{n})); + + *into = *from; + } + } + else if (_tensorShape.rank() == 4) + { + auto featureShape = _tensorShape.asFeature(); + + const ::internal::nnapi::feature::Reader<float> from{featureShape, inputBuffer, inputSize}; + ::internal::nnapi::feature::View<float> into{featureShape, outputBuffer, outputSize}; + + ::nnfw::util::feature::iterate(featureShape) + << [&](uint32_t batch, uint32_t ch, uint32_t row, uint32_t col) { + const auto value = from.at(batch, ch, row, col); + into.at(batch, ch, row, col) = value; + }; + } +} + +void TensorConvertFromCommonLayer::configure(::internal::common::Tensor *inputTensor, + ::internal::cpu::Tensor *outputTensor, + const Shape &tensorShape) +{ + _inputTensor = inputTensor; + _outputTensor = outputTensor; + _tensorShape = tensorShape; +} + +void TensorConvertFromCommonLayer::run() { convert(); } + +} // namespace cpu +} // namespace kernel +} // namespace neurun + +#endif |