diff options
author | David Monahan <David.Monahan@arm.com> | 2021-11-01 10:16:37 +0000 |
---|---|---|
committer | David Monahan <david.monahan@arm.com> | 2021-11-01 16:32:24 +0000 |
commit | 2d9956162dd002a41f7fb4fa6753195d33524c7f (patch) | |
tree | 35b88472ff1bc5374c40365785c626cfb1ddec2c /tests/NetworkExecutionUtils | |
parent | 6b9eba2f785093747f04af245da0cec7aca3931c (diff) | |
download | armnn-2d9956162dd002a41f7fb4fa6753195d33524c7f.tar.gz |
IVGCVSW-6359 Added support for Float16 (Half) to Execute Network
* Allows the user to specify float16 as a datatype
* Does not contain support for float16 on the TfLiteDelegate via
ExecuteNetwork
Signed-off-by: David Monahan <David.Monahan@arm.com>
Change-Id: Icba56feedab32662e2cf671cc46ada899cf40c6c
Diffstat (limited to 'tests/NetworkExecutionUtils')
-rw-r--r-- | tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp | 29 | ||||
-rw-r--r-- | tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp | 2 |
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp b/tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp index 6c74aaa6ed..00ed55caaf 100644 --- a/tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp +++ b/tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp @@ -34,6 +34,15 @@ auto ParseDataArray<armnn::DataType::Float32>(std::istream& stream) } template<> +auto ParseDataArray<armnn::DataType::Float16>(std::istream& stream) +{ + return ParseArrayImpl<armnn::Half>(stream, [](const std::string& s) + { + return armnn::Half(std::stof(s)); + }); +} + +template<> auto ParseDataArray<armnn::DataType::Signed32>(std::istream& stream) { return ParseArrayImpl<int>(stream, [](const std::string& s) { return std::stoi(s); }); @@ -139,6 +148,20 @@ void TensorPrinter::operator()(const std::vector<float>& values) WriteToFile(values); } +void TensorPrinter::operator()(const std::vector<armnn::Half>& values) +{ + if (m_PrintToConsole) + { + std::cout << m_OutputBinding << ": "; + ForEachValue(values, [](armnn::Half value) + { + printf("%f ", static_cast<float>(value)); + }); + printf("\n"); + } + WriteToFile(values); +} + void TensorPrinter::operator()(const std::vector<uint8_t>& values) { if(m_DequantizeOutput) @@ -261,6 +284,12 @@ void PopulateTensorWithData(armnnUtils::TContainer& tensorData, GenerateDummyTensorData<armnn::DataType::Float32>(numElements); } } + else if (dataTypeStr.compare("float16") == 0) + { + tensorData = readFromFile ? + ParseDataArray<armnn::DataType::Float16>(inputTensorFile) : + GenerateDummyTensorData<armnn::DataType::Float16>(numElements); + } else if (dataTypeStr.compare("int") == 0) { tensorData = readFromFile ? diff --git a/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp b/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp index bc2868ab35..8cd5c5b310 100644 --- a/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp +++ b/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp @@ -36,6 +36,8 @@ struct TensorPrinter void operator()(const std::vector<int8_t>& values); + void operator()(const std::vector<armnn::Half>& values); + private: template<typename Container, typename Delegate> void ForEachValue(const Container& c, Delegate delegate); |