From 2fd6100c7c034d6fc4420fbb5b615660803e46e9 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Fri, 3 May 2019 12:54:26 +0100 Subject: IVGCVSW-3038 Move MakeInputTensors to armnnUtils Change-Id: I4352a645badde788b9e33b3675a9cc9c0fc3dc33 Signed-off-by: Jim Flynn --- src/armnnUtils/TensorIOUtils.hpp | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/armnnUtils/TensorIOUtils.hpp (limited to 'src') diff --git a/src/armnnUtils/TensorIOUtils.hpp b/src/armnnUtils/TensorIOUtils.hpp new file mode 100644 index 0000000000..bf5a37b00f --- /dev/null +++ b/src/armnnUtils/TensorIOUtils.hpp @@ -0,0 +1,87 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include +#include + +#include +#include + +namespace armnnUtils +{ + +template +inline armnn::InputTensors MakeInputTensors( + const std::vector& inputBindings, + const std::vector& inputDataContainers) +{ + armnn::InputTensors inputTensors; + + const size_t numInputs = inputBindings.size(); + if (numInputs != inputDataContainers.size()) + { + throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of " + "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size())); + } + + for (size_t i = 0; i < numInputs; i++) + { + const armnn::BindingPointInfo& inputBinding = inputBindings[i]; + const TContainer& inputData = inputDataContainers[i]; + + boost::apply_visitor([&](auto&& value) + { + if (value.size() != inputBinding.second.GetNumElements()) + { + throw armnn::Exception("Input tensor has incorrect size"); + } + + armnn::ConstTensor inputTensor(inputBinding.second, value.data()); + inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor)); + }, + inputData); + } + + return inputTensors; +} + +template +inline armnn::OutputTensors MakeOutputTensors( + const std::vector& outputBindings, + std::vector& outputDataContainers) +{ + armnn::OutputTensors outputTensors; + + const size_t numOutputs = outputBindings.size(); + if (numOutputs != outputDataContainers.size()) + { + throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of " + "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size())); + } + + for (size_t i = 0; i < numOutputs; i++) + { + const armnn::BindingPointInfo& outputBinding = outputBindings[i]; + TContainer& outputData = outputDataContainers[i]; + + boost::apply_visitor([&](auto&& value) + { + if (value.size() != outputBinding.second.GetNumElements()) + { + throw armnn::Exception("Output tensor has incorrect size"); + } + + armnn::Tensor outputTensor(outputBinding.second, value.data()); + outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor)); + }, + outputData); + } + + return outputTensors; +} + +} // namespace armnnUtils \ No newline at end of file -- cgit v1.2.1