diff options
Diffstat (limited to 'src/backends/backendsCommon')
-rw-r--r-- | src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp | 141 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp | 48 |
2 files changed, 126 insertions, 63 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp index 9226f215aa..fa9a825313 100644 --- a/src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp @@ -6,15 +6,16 @@ #include "DebugTestImpl.hpp" #include <armnnUtils/QuantizeHelper.hpp> +#include <armnnUtils/Filesystem.hpp> #include <ResolveType.hpp> - #include <armnnTestUtils/TensorCopyUtils.hpp> #include <armnnTestUtils/WorkloadTestUtils.hpp> #include <armnnTestUtils/TensorHelpers.hpp> #include <doctest/doctest.h> +#include <armnnUtils/Filesystem.hpp> namespace { @@ -29,6 +30,8 @@ LayerTestResult<T, Dim> DebugTestImpl( std::vector<float>& outputExpectedData, armnn::DebugQueueDescriptor descriptor, const std::string expectedStringOutput, + const std::string& layerName, + bool toFile, const float qScale = 1.0f, const int32_t qOffset = 0) { @@ -65,15 +68,27 @@ LayerTestResult<T, Dim> DebugTestImpl( CopyDataToITensorHandle(inputHandle.get(), input.data()); - std::ostringstream oss; - std::streambuf* coutStreambuf = std::cout.rdbuf(); - std::cout.rdbuf(oss.rdbuf()); + if (toFile) + { + fs::path tmpDir = fs::temp_directory_path(); + std::string full_path = tmpDir.generic_string() + "/ArmNNIntermediateLayerOutputs/" + layerName + ".numpy"; - ExecuteWorkload(*workload, memoryManager); + ExecuteWorkload(*workload, memoryManager); - std::cout.rdbuf(coutStreambuf); + armnnUtils::Filesystem::FileContents output = armnnUtils::Filesystem::ReadFileContentsIntoString(full_path); + CHECK((output == expectedStringOutput)); + } + else + { + std::ostringstream oss; + std::streambuf* coutStreambuf = std::cout.rdbuf(); + std::cout.rdbuf(oss.rdbuf()); - CHECK(oss.str() == expectedStringOutput); + ExecuteWorkload(*workload, memoryManager); + + std::cout.rdbuf(coutStreambuf); + CHECK(oss.str() == expectedStringOutput); + } CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); @@ -86,7 +101,8 @@ LayerTestResult<T, Dim> DebugTestImpl( template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> LayerTestResult<T, 4> Debug4dTest( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -98,6 +114,7 @@ LayerTestResult<T, 4> Debug4dTest( desc.m_Guid = 1; desc.m_LayerName = "TestOutput"; desc.m_SlotIndex = 0; + desc.m_LayerOutputToFile = toFile; inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType); outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType); @@ -133,13 +150,16 @@ LayerTestResult<T, 4> Debug4dTest( input, outputExpected, desc, - expectedStringOutput); + expectedStringOutput, + desc.m_LayerName, + toFile); } template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> LayerTestResult<T, 3> Debug3dTest( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -151,6 +171,7 @@ LayerTestResult<T, 3> Debug3dTest( desc.m_Guid = 1; desc.m_LayerName = "TestOutput"; desc.m_SlotIndex = 0; + desc.m_LayerOutputToFile = toFile; inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType); outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType); @@ -184,13 +205,16 @@ LayerTestResult<T, 3> Debug3dTest( input, outputExpected, desc, - expectedStringOutput); + expectedStringOutput, + desc.m_LayerName, + toFile); } template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> LayerTestResult<T, 2> Debug2dTest( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -202,6 +226,7 @@ LayerTestResult<T, 2> Debug2dTest( desc.m_Guid = 1; desc.m_LayerName = "TestOutput"; desc.m_SlotIndex = 0; + desc.m_LayerOutputToFile = toFile; inputTensorInfo = armnn::TensorInfo(2, inputShape, ArmnnType); outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType); @@ -233,13 +258,16 @@ LayerTestResult<T, 2> Debug2dTest( input, outputExpected, desc, - expectedStringOutput); + expectedStringOutput, + desc.m_LayerName, + toFile); } template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> LayerTestResult<T, 1> Debug1dTest( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -251,6 +279,7 @@ LayerTestResult<T, 1> Debug1dTest( desc.m_Guid = 1; desc.m_LayerName = "TestOutput"; desc.m_SlotIndex = 0; + desc.m_LayerOutputToFile = toFile; inputTensorInfo = armnn::TensorInfo(1, inputShape, ArmnnType); outputTensorInfo = armnn::TensorInfo(1, outputShape, ArmnnType); @@ -280,119 +309,137 @@ LayerTestResult<T, 1> Debug1dTest( input, outputExpected, desc, - expectedStringOutput); + expectedStringOutput, + desc.m_LayerName, + toFile); } } // anonymous namespace LayerTestResult<float, 4> Debug4dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug4dTest<armnn::DataType::Float32>(workloadFactory, memoryManager); + return Debug4dTest<armnn::DataType::Float32>(workloadFactory, memoryManager, toFile); } LayerTestResult<float, 3> Debug3dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug3dTest<armnn::DataType::Float32>(workloadFactory, memoryManager); + return Debug3dTest<armnn::DataType::Float32>(workloadFactory, memoryManager, toFile); } LayerTestResult<float, 2> Debug2dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug2dTest<armnn::DataType::Float32>(workloadFactory, memoryManager); + return Debug2dTest<armnn::DataType::Float32>(workloadFactory, memoryManager, toFile); } LayerTestResult<float, 1> Debug1dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug1dTest<armnn::DataType::Float32>(workloadFactory, memoryManager); + return Debug1dTest<armnn::DataType::Float32>(workloadFactory, memoryManager, toFile); } LayerTestResult<armnn::BFloat16, 4> Debug4dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug4dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager); + return Debug4dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager, toFile); } LayerTestResult<armnn::BFloat16, 3> Debug3dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug3dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager); + return Debug3dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager, toFile); } LayerTestResult<armnn::BFloat16, 2> Debug2dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug2dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager); + return Debug2dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager, toFile); } LayerTestResult<armnn::BFloat16, 1> Debug1dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug1dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager); + return Debug1dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager, toFile); } LayerTestResult<uint8_t, 4> Debug4dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug4dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager); + return Debug4dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, toFile); } LayerTestResult<uint8_t, 3> Debug3dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager); + return Debug3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, toFile); } LayerTestResult<uint8_t, 2> Debug2dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager); + return Debug2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, toFile); } LayerTestResult<uint8_t, 1> Debug1dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug1dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager); + return Debug1dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, toFile); } LayerTestResult<int16_t, 4> Debug4dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager); + return Debug4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, toFile); } LayerTestResult<int16_t, 3> Debug3dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager); + return Debug3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, toFile); } LayerTestResult<int16_t, 2> Debug2dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager); + return Debug2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, toFile); } LayerTestResult<int16_t, 1> Debug1dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile = false) { - return Debug1dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager); + return Debug1dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, toFile); } diff --git a/src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp index ac068e8939..250c658cbf 100644 --- a/src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp +++ b/src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp @@ -14,64 +14,80 @@ LayerTestResult<float, 4> Debug4dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<float, 3> Debug3dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<float, 2> Debug2dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<float, 1> Debug1dFloat32Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<armnn::BFloat16, 4> Debug4dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<armnn::BFloat16, 3> Debug3dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<armnn::BFloat16, 2> Debug2dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<armnn::BFloat16, 1> Debug1dBFloat16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<uint8_t, 4> Debug4dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<uint8_t, 3> Debug3dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<uint8_t, 2> Debug2dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<uint8_t, 1> Debug1dUint8Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<int16_t, 4> Debug4dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<int16_t, 3> Debug3dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<int16_t, 2> Debug2dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); LayerTestResult<int16_t, 1> Debug1dInt16Test( armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool toFile); |