aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/reference')
-rw-r--r--src/backends/reference/test/RefLayerTests.cpp59
-rw-r--r--src/backends/reference/workloads/Debug.cpp110
-rw-r--r--src/backends/reference/workloads/Debug.hpp4
-rw-r--r--src/backends/reference/workloads/RefDebugWorkload.cpp2
4 files changed, 114 insertions, 61 deletions
diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp
index ae40333658..7375847602 100644
--- a/src/backends/reference/test/RefLayerTests.cpp
+++ b/src/backends/reference/test/RefLayerTests.cpp
@@ -2250,25 +2250,46 @@ ARMNN_AUTO_TEST_CASE_WITH_THF(StridedSlice2dInt16, StridedSlice2dInt16Test)
ARMNN_AUTO_TEST_CASE_WITH_THF(StridedSlice2dReverseInt16, StridedSlice2dReverseInt16Test)
// Debug
-ARMNN_AUTO_TEST_CASE(Debug4dFloat32, Debug4dFloat32Test)
-ARMNN_AUTO_TEST_CASE(Debug3dFloat32, Debug3dFloat32Test)
-ARMNN_AUTO_TEST_CASE(Debug2dFloat32, Debug2dFloat32Test)
-ARMNN_AUTO_TEST_CASE(Debug1dFloat32, Debug1dFloat32Test)
-
-ARMNN_AUTO_TEST_CASE(Debug4dBFloat16, Debug4dBFloat16Test)
-ARMNN_AUTO_TEST_CASE(Debug3dBFloat16, Debug3dBFloat16Test)
-ARMNN_AUTO_TEST_CASE(Debug2dBFloat16, Debug2dBFloat16Test)
-ARMNN_AUTO_TEST_CASE(Debug1dBFloat16, Debug1dBFloat16Test)
-
-ARMNN_AUTO_TEST_CASE(Debug4dUint8, Debug4dUint8Test)
-ARMNN_AUTO_TEST_CASE(Debug3dUint8, Debug3dUint8Test)
-ARMNN_AUTO_TEST_CASE(Debug2dUint8, Debug2dUint8Test)
-ARMNN_AUTO_TEST_CASE(Debug1dUint8, Debug1dUint8Test)
-
-ARMNN_AUTO_TEST_CASE(Debug4dQSymm16, Debug4dInt16Test)
-ARMNN_AUTO_TEST_CASE(Debug3dQSymm16, Debug3dInt16Test)
-ARMNN_AUTO_TEST_CASE(Debug2dQSymm16, Debug2dInt16Test)
-ARMNN_AUTO_TEST_CASE(Debug1dQSymm16, Debug1dInt16Test)
+ARMNN_AUTO_TEST_CASE(Debug4dFloat32, Debug4dFloat32Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug3dFloat32, Debug3dFloat32Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug2dFloat32, Debug2dFloat32Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug1dFloat32, Debug1dFloat32Test, /*toFile*/ false)
+
+ARMNN_AUTO_TEST_CASE(Debug4dBFloat16, Debug4dBFloat16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug3dBFloat16, Debug3dBFloat16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug2dBFloat16, Debug2dBFloat16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug1dBFloat16, Debug1dBFloat16Test, /*toFile*/ false)
+
+ARMNN_AUTO_TEST_CASE(Debug4dUint8, Debug4dUint8Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug3dUint8, Debug3dUint8Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug2dUint8, Debug2dUint8Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug1dUint8, Debug1dUint8Test, /*toFile*/ false)
+
+ARMNN_AUTO_TEST_CASE(Debug4dQSymm16, Debug4dInt16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug3dQSymm16, Debug3dInt16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug2dQSymm16, Debug2dInt16Test, /*toFile*/ false)
+ARMNN_AUTO_TEST_CASE(Debug1dQSymm16, Debug1dInt16Test, /*toFile*/ false)
+
+// Debug To File
+ARMNN_AUTO_TEST_CASE(DebugToFile4dFloat32, Debug4dFloat32Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile3dFloat32, Debug3dFloat32Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile2dFloat32, Debug2dFloat32Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile1dFloat32, Debug1dFloat32Test, /*toFile*/ true)
+
+ARMNN_AUTO_TEST_CASE(DebugToFile4dBFloat16, Debug4dBFloat16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile3dBFloat16, Debug3dBFloat16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile2dBFloat16, Debug2dBFloat16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile1dBFloat16, Debug1dBFloat16Test, /*toFile*/ true)
+
+ARMNN_AUTO_TEST_CASE(DebugToFile4dUint8, Debug4dUint8Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile3dUint8, Debug3dUint8Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile2dUint8, Debug2dUint8Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile1dUint8, Debug1dUint8Test, /*toFile*/ true)
+
+ARMNN_AUTO_TEST_CASE(DebugToFile4dQSymm16, Debug4dInt16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile3dQSymm16, Debug3dInt16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile2dQSymm16, Debug2dInt16Test, /*toFile*/ true)
+ARMNN_AUTO_TEST_CASE(DebugToFile1dQSymm16, Debug1dInt16Test, /*toFile*/ true)
// Gather
ARMNN_AUTO_TEST_CASE_WITH_THF(Gather1dParamsFloat32, Gather1dParamsFloat32Test)
diff --git a/src/backends/reference/workloads/Debug.cpp b/src/backends/reference/workloads/Debug.cpp
index 24000d45e6..fdadfef590 100644
--- a/src/backends/reference/workloads/Debug.cpp
+++ b/src/backends/reference/workloads/Debug.cpp
@@ -5,22 +5,27 @@
#include "Debug.hpp"
#include <common/include/ProfilingGuid.hpp>
+#include <armnnUtils/Filesystem.hpp>
#include <BFloat16.hpp>
#include <Half.hpp>
#include <algorithm>
#include <iostream>
+#include <iosfwd>
+#include <fstream>
+#include <sys/stat.h>
namespace armnn
{
-template <typename T>
-void Debug(const TensorInfo& inputInfo,
- const T* inputData,
- LayerGuid guid,
- const std::string& layerName,
- unsigned int slotIndex)
+template<typename T>
+void PrintOutput(const TensorInfo& inputInfo,
+ const T* inputData,
+ LayerGuid guid,
+ const std::string& layerName,
+ unsigned int slotIndex,
+ std::ostream& os)
{
const unsigned int numDims = inputInfo.GetNumDimensions();
const unsigned int numElements = inputInfo.GetNumElements();
@@ -34,30 +39,30 @@ void Debug(const TensorInfo& inputInfo,
strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];
}
- std::cout << "{ ";
- std::cout << "\"layerGuid\": " << guid << ", ";
- std::cout << "\"layerName\": \"" << layerName << "\", ";
- std::cout << "\"outputSlot\": " << slotIndex << ", ";
- std::cout << "\"shape\": ";
+ os << "{ ";
+ os << "\"layerGuid\": " << guid << ", ";
+ os << "\"layerName\": \"" << layerName << "\", ";
+ os << "\"outputSlot\": " << slotIndex << ", ";
+ os << "\"shape\": ";
- std::cout << "[";
+ os << "[";
for (unsigned int i = 0; i < numDims; i++)
{
- std::cout << inputShape[i];
+ os << inputShape[i];
if (i != numDims - 1)
{
- std::cout << ", ";
+ os << ", ";
}
}
- std::cout << "], ";
+ os << "], ";
- std::cout << "\"min\": "
- << static_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
+ os << "\"min\": "
+ << static_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
- std::cout << "\"max\": "
- << static_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
+ os << "\"max\": "
+ << static_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
- std::cout << "\"data\": ";
+ os << "\"data\": ";
for (unsigned int i = 0; i < numElements; i++)
{
@@ -65,69 +70,96 @@ void Debug(const TensorInfo& inputInfo,
{
if (i % strides[j] == 0)
{
- std::cout << "[" ;
+ os << "[";
}
}
- std::cout << static_cast<float>(inputData[i]);
+ os << static_cast<float>(inputData[i]);
for (unsigned int j = 0; j < numDims; j++)
{
- if ((i+1) % strides[j] == 0)
+ if ((i + 1) % strides[j] == 0)
{
- std::cout << "]" ;
+ os << "]";
}
}
if (i != numElements - 1)
{
- std::cout << ", ";
+ os << ", ";
}
}
- std::cout << " }" << std::endl;
+ os << " }" << std::endl;
+}
+
+template<typename T>
+void Debug(const TensorInfo& inputInfo,
+ const T* inputData,
+ LayerGuid guid,
+ const std::string& layerName,
+ unsigned int slotIndex,
+ bool outputsToFile)
+{
+ if (outputsToFile)
+ {
+ auto rootPathToFile = armnnUtils::Filesystem::CreateDirectory("/ArmNNIntermediateLayerOutputs");
+ std::ofstream out(rootPathToFile + layerName + ".numpy");
+ PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, out);
+ }
+ else
+ {
+ PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, std::cout);
+ }
}
template void Debug<BFloat16>(const TensorInfo& inputInfo,
- const BFloat16* inputData,
- LayerGuid guid,
- const std::string& layerName,
- unsigned int slotIndex);
+ const BFloat16* inputData,
+ LayerGuid guid,
+ const std::string& layerName,
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<Half>(const TensorInfo& inputInfo,
const Half* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<float>(const TensorInfo& inputInfo,
const float* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<uint8_t>(const TensorInfo& inputInfo,
const uint8_t* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<int8_t>(const TensorInfo& inputInfo,
- const int8_t* inputData,
- LayerGuid guid,
- const std::string& layerName,
- unsigned int slotIndex);
+ const int8_t* inputData,
+ LayerGuid guid,
+ const std::string& layerName,
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<int16_t>(const TensorInfo& inputInfo,
const int16_t* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
template void Debug<int32_t>(const TensorInfo& inputInfo,
const int32_t* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
} // namespace armnn
diff --git a/src/backends/reference/workloads/Debug.hpp b/src/backends/reference/workloads/Debug.hpp
index 3f9920c543..a8802d1524 100644
--- a/src/backends/reference/workloads/Debug.hpp
+++ b/src/backends/reference/workloads/Debug.hpp
@@ -8,12 +8,12 @@
namespace armnn
{
-
template <typename T>
void Debug(const TensorInfo& inputInfo,
const T* inputData,
LayerGuid guid,
const std::string& layerName,
- unsigned int slotIndex);
+ unsigned int slotIndex,
+ bool outputsToFile);
} //namespace armnn
diff --git a/src/backends/reference/workloads/RefDebugWorkload.cpp b/src/backends/reference/workloads/RefDebugWorkload.cpp
index 48b519f809..db67b3a782 100644
--- a/src/backends/reference/workloads/RefDebugWorkload.cpp
+++ b/src/backends/reference/workloads/RefDebugWorkload.cpp
@@ -45,7 +45,7 @@ void RefDebugWorkload<DataType>::Execute(std::vector<ITensorHandle*> inputs) con
}
else
{
- Debug(inputInfo, inputData, m_Data.m_Guid, m_Data.m_LayerName, m_Data.m_SlotIndex);
+ Debug(inputInfo, inputData, m_Data.m_Guid, m_Data.m_LayerName, m_Data.m_SlotIndex, m_Data.m_LayerOutputToFile);
}
std::memcpy(outputData, inputData, inputInfo.GetNumElements()*sizeof(T));