diff options
author | Nattapat Chaimanowong <nattapat.chaimanowong@arm.com> | 2018-12-06 11:54:33 +0000 |
---|---|---|
committer | Les Bell <les.bell@arm.com> | 2018-12-07 08:50:53 +0000 |
commit | cfdcadf9feebaa112545923343875e790a18cc1c (patch) | |
tree | 0255dc2008acaf43322a7965378a5a3c27b97f20 /src/backends/reference/workloads/Debug.cpp | |
parent | 23be07e855c066f192c1007d529064462853a27c (diff) | |
download | armnn-cfdcadf9feebaa112545923343875e790a18cc1c.tar.gz |
IVGCVSW-2316 Add reference implementation and unit tests for Debug
Change-Id: Ib2e5de2a057da57ef77a9f5c4367d699d4773294
Diffstat (limited to 'src/backends/reference/workloads/Debug.cpp')
-rw-r--r-- | src/backends/reference/workloads/Debug.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/backends/reference/workloads/Debug.cpp b/src/backends/reference/workloads/Debug.cpp new file mode 100644 index 0000000000..dfcbbd8e97 --- /dev/null +++ b/src/backends/reference/workloads/Debug.cpp @@ -0,0 +1,101 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#include "Debug.hpp" + +#include <boost/numeric/conversion/cast.hpp> + +#include <cstring> +#include <algorithm> +#include <iostream> + +namespace armnn +{ + +template <typename T> +void Debug(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const DebugDescriptor& descriptor, + const T* inputData, + T* outputData) +{ + const unsigned int numDims = inputInfo.GetNumDimensions(); + const unsigned int numElements = inputInfo.GetNumElements(); + const TensorShape& inputShape = inputInfo.GetShape(); + + unsigned int strides[numDims]; + strides[numDims - 1] = inputShape[numDims - 1]; + + for (unsigned int i = 2; i <= numDims; i++) + { + strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i]; + } + + std::cout << "{ "; + std::cout << "\"layer\": \"" << descriptor.m_LayerName << "\", "; + std::cout << "\"outputSlot\": " << descriptor.m_SlotIndex << ", "; + std::cout << "\"shape\": "; + + std::cout << "["; + for (unsigned int i = 0; i < numDims; i++) + { + std::cout << inputShape[i]; + if (i != numDims - 1) + { + std::cout << ", "; + } + } + std::cout << "], "; + + std::cout << "\"min\": " + << boost::numeric_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", "; + + std::cout << "\"max\": " + << boost::numeric_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", "; + + std::cout << "\"data\": "; + + for (unsigned int i = 0; i < numElements; i++) + { + for (unsigned int j = 0; j < numDims; j++) + { + if (i % strides[j] == 0) + { + std::cout << "[" ; + } + } + + std::cout << boost::numeric_cast<float>(inputData[i]); + + for (unsigned int j = 0; j < numDims; j++) + { + if ((i+1) % strides[j] == 0) + { + std::cout << "]" ; + } + } + + if (i != numElements - 1) + { + std::cout << ", "; + } + } + + std::cout << " }" << std::endl; + + std::memcpy(outputData, inputData, inputInfo.GetNumElements()*sizeof(T)); +} + +template void Debug<float>(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const DebugDescriptor& descriptor, + const float* inputData, + float* outputData); + +template void Debug<uint8_t>(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const DebugDescriptor& descriptor, + const uint8_t* inputData, + uint8_t* outputData); +} //namespace armnn |