17 #include <doctest/doctest.h> 22 template<
typename T, std::
size_t Dim>
28 std::vector<float>& inputData,
29 std::vector<float>& outputExpectedData,
31 const std::string expectedStringOutput,
32 const float qScale = 1.0f,
33 const int32_t qOffset = 0)
36 if(armnn::IsQuantizedType<T>())
45 std::vector<T> input = armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset);
48 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset);
51 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.
CreateTensorHandle(inputTensorInfo);
52 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputTensorInfo);
56 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
57 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
59 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.
CreateDebug(descriptor, info);
61 inputHandle->Allocate();
62 outputHandle->Allocate();
66 std::ostringstream oss;
67 std::streambuf* coutStreambuf = std::cout.rdbuf();
68 std::cout.rdbuf(oss.rdbuf());
70 ExecuteWorkload(*workload, memoryManager);
72 std::cout.rdbuf(coutStreambuf);
74 CHECK(oss.str() == expectedStringOutput);
80 outputHandle->GetShape(),
84 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
92 unsigned int inputShape[] = {1, 2, 2, 3};
93 unsigned int outputShape[] = {1, 2, 2, 3};
103 std::vector<float> input = std::vector<float>(
111 std::vector<float> outputExpected = std::vector<float>(
119 const std::string expectedStringOutput =
120 "{ \"layerGuid\": 1," 121 " \"layerName\": \"TestOutput\"," 122 " \"outputSlot\": 0," 123 " \"shape\": [1, 2, 2, 3]," 124 " \"min\": 1, \"max\": 12," 125 " \"data\": [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]] }\n";
127 return DebugTestImpl<T, 4>(workloadFactory,
134 expectedStringOutput);
137 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
145 unsigned int inputShape[] = {3, 3, 1};
146 unsigned int outputShape[] = {3, 3, 1};
156 std::vector<float> input = std::vector<float>(
163 std::vector<float> outputExpected = std::vector<float>(
170 const std::string expectedStringOutput =
171 "{ \"layerGuid\": 1," 172 " \"layerName\": \"TestOutput\"," 173 " \"outputSlot\": 0," 174 " \"shape\": [3, 3, 1]," 175 " \"min\": 1, \"max\": 9," 176 " \"data\": [[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]] }\n";
178 return DebugTestImpl<T, 3>(workloadFactory,
185 expectedStringOutput);
188 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
196 unsigned int inputShape[] = {2, 2};
197 unsigned int outputShape[] = {2, 2};
207 std::vector<float> input = std::vector<float>(
213 std::vector<float> outputExpected = std::vector<float>(
219 const std::string expectedStringOutput =
220 "{ \"layerGuid\": 1," 221 " \"layerName\": \"TestOutput\"," 222 " \"outputSlot\": 0," 223 " \"shape\": [2, 2]," 224 " \"min\": 1, \"max\": 4," 225 " \"data\": [[1, 2], [3, 4]] }\n";
227 return DebugTestImpl<T, 2>(workloadFactory,
234 expectedStringOutput);
237 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
245 unsigned int inputShape[] = {4};
246 unsigned int outputShape[] = {4};
256 std::vector<float> input = std::vector<float>(
258 1.0f, 2.0f, 3.0f, 4.0f,
261 std::vector<float> outputExpected = std::vector<float>(
263 1.0f, 2.0f, 3.0f, 4.0f,
266 const std::string expectedStringOutput =
267 "{ \"layerGuid\": 1," 268 " \"layerName\": \"TestOutput\"," 269 " \"outputSlot\": 0," 271 " \"min\": 1, \"max\": 4," 272 " \"data\": [1, 2, 3, 4] }\n";
274 return DebugTestImpl<T, 1>(workloadFactory,
281 expectedStringOutput);
290 return Debug4dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
297 return Debug3dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
304 return Debug2dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
311 return Debug1dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
318 return Debug4dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
325 return Debug3dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
332 return Debug2dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
339 return Debug1dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
346 return Debug4dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
353 return Debug3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
360 return Debug2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
367 return Debug1dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
374 return Debug4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
381 return Debug3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
388 return Debug2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
395 return Debug1dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
virtual std::unique_ptr< IWorkload > CreateDebug(const DebugQueueDescriptor &descriptor, const WorkloadInfo &info) const
const TensorShape & GetShape() const
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
LayerTestResult< int16_t, 3 > Debug3dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 1 > Debug1dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::BFloat16, 1 > Debug1dBFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 1 > Debug1dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void IgnoreUnused(Ts &&...)
#define ARMNN_NO_DEPRECATE_WARN_END
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< int16_t, 1 > Debug1dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 2 > Debug2dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void SetQuantizationScale(float scale)
LayerTestResult< armnn::BFloat16, 3 > Debug3dBFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
LayerTestResult< armnn::BFloat16, 2 > Debug2dBFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 4 > Debug4dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 3 > Debug3dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::BFloat16, 4 > Debug4dBFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 4 > Debug4dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 2 > Debug2dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
Contains information about TensorInfos of a layer.
void SetQuantizationOffset(int32_t offset)
LayerTestResult< uint8_t, 4 > Debug4dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 2 > Debug2dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 3 > Debug3dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
unsigned int GetNumElements() const
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)