blob: dfcbbd8e97dd695e6ebcd7d00e38f4cad01c577e [file] [log] [blame]
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#include "Debug.hpp"
6
7#include <boost/numeric/conversion/cast.hpp>
8
9#include <cstring>
10#include <algorithm>
11#include <iostream>
12
13namespace armnn
14{
15
16template <typename T>
17void Debug(const TensorInfo& inputInfo,
18 const TensorInfo& outputInfo,
19 const DebugDescriptor& descriptor,
20 const T* inputData,
21 T* outputData)
22{
23 const unsigned int numDims = inputInfo.GetNumDimensions();
24 const unsigned int numElements = inputInfo.GetNumElements();
25 const TensorShape& inputShape = inputInfo.GetShape();
26
27 unsigned int strides[numDims];
28 strides[numDims - 1] = inputShape[numDims - 1];
29
30 for (unsigned int i = 2; i <= numDims; i++)
31 {
32 strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];
33 }
34
35 std::cout << "{ ";
36 std::cout << "\"layer\": \"" << descriptor.m_LayerName << "\", ";
37 std::cout << "\"outputSlot\": " << descriptor.m_SlotIndex << ", ";
38 std::cout << "\"shape\": ";
39
40 std::cout << "[";
41 for (unsigned int i = 0; i < numDims; i++)
42 {
43 std::cout << inputShape[i];
44 if (i != numDims - 1)
45 {
46 std::cout << ", ";
47 }
48 }
49 std::cout << "], ";
50
51 std::cout << "\"min\": "
52 << boost::numeric_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
53
54 std::cout << "\"max\": "
55 << boost::numeric_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
56
57 std::cout << "\"data\": ";
58
59 for (unsigned int i = 0; i < numElements; i++)
60 {
61 for (unsigned int j = 0; j < numDims; j++)
62 {
63 if (i % strides[j] == 0)
64 {
65 std::cout << "[" ;
66 }
67 }
68
69 std::cout << boost::numeric_cast<float>(inputData[i]);
70
71 for (unsigned int j = 0; j < numDims; j++)
72 {
73 if ((i+1) % strides[j] == 0)
74 {
75 std::cout << "]" ;
76 }
77 }
78
79 if (i != numElements - 1)
80 {
81 std::cout << ", ";
82 }
83 }
84
85 std::cout << " }" << std::endl;
86
87 std::memcpy(outputData, inputData, inputInfo.GetNumElements()*sizeof(T));
88}
89
90template void Debug<float>(const TensorInfo& inputInfo,
91 const TensorInfo& outputInfo,
92 const DebugDescriptor& descriptor,
93 const float* inputData,
94 float* outputData);
95
96template void Debug<uint8_t>(const TensorInfo& inputInfo,
97 const TensorInfo& outputInfo,
98 const DebugDescriptor& descriptor,
99 const uint8_t* inputData,
100 uint8_t* outputData);
101} //namespace armnn