From f92dfced4498f12b9315c0fa377ba7be8998b607 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Thu, 2 May 2019 11:33:25 +0100 Subject: IVGCVSW-2833 Add Dynamic Quantization Change-Id: Iba91e3f3625639f01d66f81a9f3e419e0e285d66 Signed-off-by: Jim Flynn --- src/armnnUtils/TensorUtils.cpp | 28 ++++++++++++++++++++++++++++ src/armnnUtils/TensorUtils.hpp | 2 ++ 2 files changed, 30 insertions(+) (limited to 'src/armnnUtils') diff --git a/src/armnnUtils/TensorUtils.cpp b/src/armnnUtils/TensorUtils.cpp index 57f823fe13..c2fbbe0bcc 100644 --- a/src/armnnUtils/TensorUtils.cpp +++ b/src/armnnUtils/TensorUtils.cpp @@ -4,6 +4,7 @@ // #include "TensorUtils.hpp" +#include namespace armnnUtils { @@ -47,4 +48,31 @@ armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, } } +std::pair FindMinMax(armnn::ITensorHandle* tensorHandle) +{ + auto tensor_data = static_cast(tensorHandle->Map(true)); + auto tensor_size = tensorHandle->GetShape().GetNumElements(); + + // Set min/max initially to first value in tensor + float min = tensor_data[0]; + float max = tensor_data[0]; + + // Loop over rest of tensor and update min/max if necessary + for (unsigned int val = 1; val < tensor_size; val++) + { + if (tensor_data[val] < min) + { + min = tensor_data[val]; + } + else if (tensor_data[val] > max) + { + max = tensor_data[val]; + } + } + + tensorHandle->Unmap(); + + return std::make_pair(min, max); +} + } diff --git a/src/armnnUtils/TensorUtils.hpp b/src/armnnUtils/TensorUtils.hpp index fb5e6eb10d..c273b497b3 100644 --- a/src/armnnUtils/TensorUtils.hpp +++ b/src/armnnUtils/TensorUtils.hpp @@ -22,4 +22,6 @@ armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, const armnn::DataLayout dataLayout, const armnn::DataType dataType); +std::pair FindMinMax(armnn::ITensorHandle* tensorHandle); + } // namespace armnnUtils -- cgit v1.2.1