From cfdcadf9feebaa112545923343875e790a18cc1c Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Thu, 6 Dec 2018 11:54:33 +0000 Subject: IVGCVSW-2316 Add reference implementation and unit tests for Debug Change-Id: Ib2e5de2a057da57ef77a9f5c4367d699d4773294 --- src/backends/reference/workloads/Debug.cpp | 101 +++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/backends/reference/workloads/Debug.cpp (limited to 'src/backends/reference/workloads/Debug.cpp') 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 + +#include +#include +#include + +namespace armnn +{ + +template +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(*std::min_element(inputData, inputData + numElements)) << ", "; + + std::cout << "\"max\": " + << boost::numeric_cast(*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(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(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const DebugDescriptor& descriptor, + const float* inputData, + float* outputData); + +template void Debug(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const DebugDescriptor& descriptor, + const uint8_t* inputData, + uint8_t* outputData); +} //namespace armnn -- cgit v1.2.1