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());
63 inputHandle->Allocate();
64 outputHandle->Allocate();
68 std::ostringstream oss;
69 std::streambuf* coutStreambuf = std::cout.rdbuf();
70 std::cout.rdbuf(oss.rdbuf());
72 ExecuteWorkload(*workload, memoryManager);
74 std::cout.rdbuf(coutStreambuf);
76 CHECK(oss.str() == expectedStringOutput);
82 outputHandle->GetShape(),
86 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
94 unsigned int inputShape[] = {1, 2, 2, 3};
95 unsigned int outputShape[] = {1, 2, 2, 3};
105 std::vector<float> input = std::vector<float>(
113 std::vector<float> outputExpected = std::vector<float>(
121 const std::string expectedStringOutput =
122 "{ \"layerGuid\": 1," 123 " \"layerName\": \"TestOutput\"," 124 " \"outputSlot\": 0," 125 " \"shape\": [1, 2, 2, 3]," 126 " \"min\": 1, \"max\": 12," 127 " \"data\": [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]] }\n";
129 return DebugTestImpl<T, 4>(workloadFactory,
136 expectedStringOutput);
139 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
147 unsigned int inputShape[] = {3, 3, 1};
148 unsigned int outputShape[] = {3, 3, 1};
158 std::vector<float> input = std::vector<float>(
165 std::vector<float> outputExpected = std::vector<float>(
172 const std::string expectedStringOutput =
173 "{ \"layerGuid\": 1," 174 " \"layerName\": \"TestOutput\"," 175 " \"outputSlot\": 0," 176 " \"shape\": [3, 3, 1]," 177 " \"min\": 1, \"max\": 9," 178 " \"data\": [[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]] }\n";
180 return DebugTestImpl<T, 3>(workloadFactory,
187 expectedStringOutput);
190 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
198 unsigned int inputShape[] = {2, 2};
199 unsigned int outputShape[] = {2, 2};
209 std::vector<float> input = std::vector<float>(
215 std::vector<float> outputExpected = std::vector<float>(
221 const std::string expectedStringOutput =
222 "{ \"layerGuid\": 1," 223 " \"layerName\": \"TestOutput\"," 224 " \"outputSlot\": 0," 225 " \"shape\": [2, 2]," 226 " \"min\": 1, \"max\": 4," 227 " \"data\": [[1, 2], [3, 4]] }\n";
229 return DebugTestImpl<T, 2>(workloadFactory,
236 expectedStringOutput);
239 template <armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
247 unsigned int inputShape[] = {4};
248 unsigned int outputShape[] = {4};
258 std::vector<float> input = std::vector<float>(
260 1.0f, 2.0f, 3.0f, 4.0f,
263 std::vector<float> outputExpected = std::vector<float>(
265 1.0f, 2.0f, 3.0f, 4.0f,
268 const std::string expectedStringOutput =
269 "{ \"layerGuid\": 1," 270 " \"layerName\": \"TestOutput\"," 271 " \"outputSlot\": 0," 273 " \"min\": 1, \"max\": 4," 274 " \"data\": [1, 2, 3, 4] }\n";
276 return DebugTestImpl<T, 1>(workloadFactory,
283 expectedStringOutput);
292 return Debug4dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
299 return Debug3dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
306 return Debug2dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
313 return Debug1dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
320 return Debug4dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
327 return Debug3dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
334 return Debug2dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
341 return Debug1dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
348 return Debug4dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
355 return Debug3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
362 return Debug2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
369 return Debug1dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
376 return Debug4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
383 return Debug3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
390 return Debug2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
397 return Debug1dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
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)
void CopyDataFromITensorHandle(void *mem, const armnn::ITensorHandle *tensorHandle)
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)
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)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
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)
virtual std::unique_ptr< IWorkload > CreateWorkload(LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const
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