20 std::initializer_list<unsigned int> expectedDimensions)
22 return CompareTensorHandleShape<IClTensorHandle>(tensorHandle, expectedDimensions);
27 template <armnn::DataType DataType>
28 static void ClCreateActivationWorkloadTest()
32 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
34 auto workload = CreateActivationWorkloadTest<ClActivationWorkload, DataType>(factory, graph);
38 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
39 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
47 ClCreateActivationWorkloadTest<armnn::DataType::Float32>();
52 ClCreateActivationWorkloadTest<armnn::DataType::Float16>();
55 template <
typename WorkloadType,
56 typename DescriptorType,
59 static void ClCreateElementwiseWorkloadTest()
63 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
65 auto workload = CreateElementwiseWorkloadTest<WorkloadType, DescriptorType, LayerType, DataType>(factory, graph);
68 DescriptorType queueDescriptor = workload->GetData();
69 auto inputHandle1 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
70 auto inputHandle2 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[1]);
71 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
149 template <
typename WorkloadType,
150 typename DescriptorType,
156 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
158 auto workload = CreateElementwiseUnaryWorkloadTest<WorkloadType, DescriptorType, DataType>(factory, graph, op);
160 DescriptorType queueDescriptor = workload->GetData();
162 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
163 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
171 ClCreateElementwiseUnaryWorkloadTest<ClRsqrtWorkload, RsqrtQueueDescriptor, armnn::DataType::Float32>(
172 UnaryOperation::Rsqrt);
175 template <
typename BatchNormalizationWorkloadType, armnn::DataType DataType>
176 static void ClCreateBatchNormalizationWorkloadTest(
DataLayout dataLayout)
180 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
182 auto workload = CreateBatchNormalizationWorkloadTest<BatchNormalizationWorkloadType, DataType>
183 (factory, graph, dataLayout);
187 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
188 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
192 case DataLayout::NHWC:
230 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
232 auto workload = CreateConvertFp16ToFp32WorkloadTest<ClConvertFp16ToFp32Workload>(factory, graph);
235 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
236 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
240 BOOST_TEST((inputHandle->GetTensor().info()->data_type() == arm_compute::DataType::F16));
241 BOOST_TEST((outputHandle->GetTensor().info()->data_type() == arm_compute::DataType::F32));
248 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
250 auto workload = CreateConvertFp32ToFp16WorkloadTest<ClConvertFp32ToFp16Workload>(factory, graph);
253 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
254 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
258 BOOST_TEST((inputHandle->GetTensor().info()->data_type() == arm_compute::DataType::F32));
259 BOOST_TEST((outputHandle->GetTensor().info()->data_type() == arm_compute::DataType::F16));
262 template <
typename Convolution2dWorkloadType,
typename armnn::DataType DataType>
263 static void ClConvolution2dWorkloadTest(
DataLayout dataLayout)
267 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
269 auto workload = CreateConvolution2dWorkloadTest<ClConvolution2dWorkload, DataType>(factory,
273 TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({2, 3, 8, 16})
274 : std::initializer_list<unsigned int>({2, 8, 16, 3});
275 TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({2, 2, 2, 10})
276 : std::initializer_list<unsigned int>({2, 2, 10, 2});
280 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.
m_Inputs[0]);
281 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.
m_Outputs[0]);
282 BOOST_TEST((inputHandle->GetShape() == inputShape));
283 BOOST_TEST((outputHandle->GetShape() == outputShape));
288 ClConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float32>(DataLayout::NCHW);
293 ClConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float32>(DataLayout::NHWC);
298 ClConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float16>(DataLayout::NCHW);
303 ClConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float16>(DataLayout::NHWC);
306 template <
typename DepthwiseConvolutionWorkloadType,
typename armnn::DataType DataType>
307 static void ClDepthwiseConvolutionWorkloadTest(
DataLayout dataLayout)
311 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
313 auto workload = CreateDepthwiseConvolution2dWorkloadTest<DepthwiseConvolutionWorkloadType, DataType>
314 (factory, graph, dataLayout);
318 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
319 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
321 TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({ 2, 2, 5, 5 })
322 : std::initializer_list<unsigned int>({ 2, 5, 5, 2 });
323 TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({ 2, 2, 5, 5 })
324 : std::initializer_list<unsigned int>({ 2, 5, 5, 2 });
326 BOOST_TEST((inputHandle->GetShape() == inputShape));
327 BOOST_TEST((outputHandle->GetShape() == outputShape));
332 ClDepthwiseConvolutionWorkloadTest<ClDepthwiseConvolutionWorkload, DataType::Float32>(DataLayout::NHWC);
335 template <
typename Convolution2dWorkloadType,
typename armnn::DataType DataType>
336 static void ClDirectConvolution2dWorkloadTest()
340 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
342 auto workload = CreateDirectConvolution2dWorkloadTest<ClConvolution2dWorkload, DataType>(factory, graph);
346 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
347 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
354 ClDirectConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float32>();
359 ClDirectConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::Float16>();
364 ClDirectConvolution2dWorkloadTest<ClConvolution2dWorkload, armnn::DataType::QAsymmU8>();
367 template <
typename FullyConnectedWorkloadType,
typename armnn::DataType DataType>
368 static void ClCreateFullyConnectedWorkloadTest()
372 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
375 CreateFullyConnectedWorkloadTest<FullyConnectedWorkloadType, DataType>(factory, graph);
379 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
380 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
388 ClCreateFullyConnectedWorkloadTest<ClFullyConnectedWorkload, armnn::DataType::Float32>();
393 ClCreateFullyConnectedWorkloadTest<ClFullyConnectedWorkload, armnn::DataType::Float16>();
396 template <
typename NormalizationWorkloadType,
typename armnn::DataType DataType>
397 static void ClNormalizationWorkloadTest(
DataLayout dataLayout)
401 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
403 auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
407 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
408 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
410 TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({3, 5, 5, 1})
411 : std::initializer_list<unsigned int>({3, 1, 5, 5});
412 TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({3, 5, 5, 1})
413 : std::initializer_list<unsigned int>({3, 1, 5, 5});
415 BOOST_TEST((inputHandle->GetShape() == inputShape));
416 BOOST_TEST((outputHandle->GetShape() == outputShape));
421 ClNormalizationWorkloadTest<ClNormalizationFloatWorkload, armnn::DataType::Float32>(DataLayout::NCHW);
426 ClNormalizationWorkloadTest<ClNormalizationFloatWorkload, armnn::DataType::Float16>(DataLayout::NCHW);
431 ClNormalizationWorkloadTest<ClNormalizationFloatWorkload, armnn::DataType::Float32>(DataLayout::NHWC);
436 ClNormalizationWorkloadTest<ClNormalizationFloatWorkload, armnn::DataType::Float16>(DataLayout::NHWC);
439 template <
typename armnn::DataType DataType>
440 static void ClPooling2dWorkloadTest(
DataLayout dataLayout)
444 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
446 auto workload = CreatePooling2dWorkloadTest<ClPooling2dWorkload, DataType>(factory, graph, dataLayout);
448 TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({3, 2, 5, 5})
449 : std::initializer_list<unsigned int>({3, 5, 5, 2});
450 TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({3, 2, 2, 4})
451 : std::initializer_list<unsigned int>({3, 2, 4, 2});
455 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.
m_Inputs[0]);
456 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.
m_Outputs[0]);
458 BOOST_TEST((inputHandle->GetShape() == inputShape));
459 BOOST_TEST((outputHandle->GetShape() == outputShape));
464 ClPooling2dWorkloadTest<armnn::DataType::Float32>(DataLayout::NCHW);
469 ClPooling2dWorkloadTest<armnn::DataType::Float32>(DataLayout::NHWC);
474 ClPooling2dWorkloadTest<armnn::DataType::Float16>(DataLayout::NCHW);
479 ClPooling2dWorkloadTest<armnn::DataType::Float16>(DataLayout::NHWC);
489 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
491 auto workload = CreatePreluWorkloadTest<ClPreluWorkload>(factory,
500 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
501 auto alphaHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[1]);
502 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
504 BOOST_TEST((inputHandle->GetShape() == inputShape));
505 BOOST_TEST((alphaHandle->GetShape() == alphaShape));
506 BOOST_TEST((outputHandle->GetShape() == outputShape));
511 ClCreatePreluWorkloadTest({ 1, 4, 1, 2 }, { 5, 4, 3, 1 }, { 5, 4, 3, 2 }, DataType::Float16);
516 ClCreatePreluWorkloadTest({ 1, 4, 1, 2 }, { 5, 4, 3, 1 }, { 5, 4, 3, 2 }, DataType::Float32);
521 ClCreatePreluWorkloadTest({ 1, 4, 1, 2 }, { 5, 4, 3, 1 }, { 5, 4, 3, 2 }, DataType::QAsymmU8);
524 template <
typename armnn::DataType DataType>
525 static void ClCreateReshapeWorkloadTest()
529 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
531 auto workload = CreateReshapeWorkloadTest<ClReshapeWorkload, DataType>(factory, graph);
535 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
536 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
544 ClCreateReshapeWorkloadTest<armnn::DataType::Float32>();
549 ClCreateReshapeWorkloadTest<armnn::DataType::Float16>();
554 ClCreateReshapeWorkloadTest<armnn::DataType::QAsymmU8>();
557 template <
typename SoftmaxWorkloadType,
typename armnn::DataType DataType>
558 static void ClSoftmaxWorkloadTest()
562 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
564 auto workload = CreateSoftmaxWorkloadTest<SoftmaxWorkloadType, DataType>(factory, graph);
568 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
569 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
578 ClSoftmaxWorkloadTest<ClSoftmaxFloatWorkload, armnn::DataType::Float32>();
583 ClSoftmaxWorkloadTest<ClSoftmaxFloatWorkload, armnn::DataType::Float16>();
586 template <
typename armnn::DataType DataType>
587 static void ClSplitterWorkloadTest()
591 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
593 auto workload = CreateSplitterWorkloadTest<ClSplitterWorkload, DataType>(factory, graph);
597 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
600 auto outputHandle1 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[1]);
603 auto outputHandle2 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[2]);
606 auto outputHandle0 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
612 ClSplitterWorkloadTest<armnn::DataType::Float32>();
617 ClSplitterWorkloadTest<armnn::DataType::Float16>();
620 template <
typename armnn::DataType DataType>
621 static void ClSplitterConcatTest()
631 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
634 CreateSplitterConcatWorkloadTest<ClSplitterWorkload, ClConcatWorkload, DataType>
637 auto wlSplitter = std::move(workloads.first);
638 auto wlConcat = std::move(workloads.second);
652 bool validDataPointers = (sOut0 == mIn1) && (sOut1 == mIn0);
653 BOOST_TEST(validDataPointers);
657 bool validSubTensorParents = (mIn0->
GetTensor().parent() == mIn1->
GetTensor().parent())
660 BOOST_TEST(validSubTensorParents);
665 ClSplitterConcatTest<armnn::DataType::Float32>();
670 ClSplitterConcatTest<armnn::DataType::Float16>();
681 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
683 std::unique_ptr<ClSplitterWorkload> wlSplitter;
684 std::unique_ptr<ClActivationWorkload> wlActiv0_0;
685 std::unique_ptr<ClActivationWorkload> wlActiv0_1;
686 std::unique_ptr<ClActivationWorkload> wlActiv1_0;
687 std::unique_ptr<ClActivationWorkload> wlActiv1_1;
691 wlActiv1_0, wlActiv1_1);
704 BOOST_TEST(activ0_0Im);
705 BOOST_TEST(activ0_1Im);
706 BOOST_TEST(activ1_0Im);
707 BOOST_TEST(activ1_1Im);
709 bool validDataPointers = (sOut0 == activ0_0Im) && (sOut0 == activ0_1Im) &&
710 (sOut1 == activ1_0Im) && (sOut1 == activ1_1Im);
712 BOOST_TEST(validDataPointers);
715 #if defined(ARMNNREF_ENABLED) 722 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
724 CreateMemCopyWorkloads<IClTensorHandle>(factory);
729 template <
typename L2NormalizationWorkloadType,
typename armnn::DataType DataType>
730 static void ClL2NormalizationWorkloadTest(
DataLayout dataLayout)
734 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
737 CreateL2NormalizationWorkloadTest<L2NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
741 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
742 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
744 TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({ 5, 20, 50, 67 })
745 : std::initializer_list<unsigned int>({ 5, 50, 67, 20 });
746 TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list<unsigned int>({ 5, 20, 50, 67 })
747 : std::initializer_list<unsigned int>({ 5, 50, 67, 20 });
749 BOOST_TEST((inputHandle->GetShape() == inputShape));
750 BOOST_TEST((outputHandle->GetShape() == outputShape));
755 ClL2NormalizationWorkloadTest<ClL2NormalizationFloatWorkload, armnn::DataType::Float32>(DataLayout::NCHW);
760 ClL2NormalizationWorkloadTest<ClL2NormalizationFloatWorkload, armnn::DataType::Float32>(DataLayout::NHWC);
765 ClL2NormalizationWorkloadTest<ClL2NormalizationFloatWorkload, armnn::DataType::Float16>(DataLayout::NCHW);
770 ClL2NormalizationWorkloadTest<ClL2NormalizationFloatWorkload, armnn::DataType::Float16>(DataLayout::NHWC);
773 template <
typename LstmWorkloadType>
774 static void ClCreateLstmWorkloadTest()
778 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
780 auto workload = CreateLstmWorkloadTest<LstmWorkloadType>(factory, graph);
783 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
784 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[1]);
791 ClCreateLstmWorkloadTest<ClLstmFloatWorkload>();
794 template <
typename ResizeWorkloadType,
typename armnn::DataType DataType>
795 static void ClResizeWorkloadTest(
DataLayout dataLayout)
799 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
801 auto workload = CreateResizeBilinearWorkloadTest<ResizeWorkloadType, DataType>(factory, graph, dataLayout);
803 auto queueDescriptor = workload->GetData();
805 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
806 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
810 case DataLayout::NHWC:
814 case DataLayout::NCHW:
823 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::Float32>(DataLayout::NCHW);
828 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::Float16>(DataLayout::NCHW);
833 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::QAsymmU8>(DataLayout::NCHW);
838 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::Float32>(DataLayout::NHWC);
843 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::Float16>(DataLayout::NHWC);
848 ClResizeWorkloadTest<ClResizeWorkload, armnn::DataType::QAsymmU8>(DataLayout::NHWC);
851 template <
typename MeanWorkloadType,
typename armnn::DataType DataType>
852 static void ClMeanWorkloadTest()
856 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
858 auto workload = CreateMeanWorkloadTest<MeanWorkloadType, DataType>(factory, graph);
862 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
863 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
872 ClMeanWorkloadTest<ClMeanWorkload, armnn::DataType::Float32>();
877 ClMeanWorkloadTest<ClMeanWorkload, armnn::DataType::Float16>();
882 ClMeanWorkloadTest<ClMeanWorkload, armnn::DataType::QAsymmU8>();
885 template <
typename ConcatWorkloadType, armnn::DataType DataType>
886 static void ClCreateConcatWorkloadTest(std::initializer_list<unsigned int> outputShape,
887 unsigned int concatAxis)
891 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
893 auto workload = CreateConcatWorkloadTest<ConcatWorkloadType, DataType>(factory, graph, outputShape, concatAxis);
896 auto inputHandle0 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
897 auto inputHandle1 = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[1]);
898 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
907 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::Float32>({ 4, 3, 2, 5 }, 0);
912 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::Float32>({ 2, 6, 2, 5 }, 1);
917 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::Float32>({ 2, 3, 2, 10 }, 3);
922 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::QAsymmU8>({ 4, 3, 2, 5 }, 0);
927 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::QAsymmU8>({ 2, 6, 2, 5 }, 1);
932 ClCreateConcatWorkloadTest<ClConcatWorkload, armnn::DataType::QAsymmU8>({ 2, 3, 2, 10 }, 3);
935 template <
typename SpaceToDepthWorkloadType,
typename armnn::DataType DataType>
936 static void ClSpaceToDepthWorkloadTest()
940 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
942 auto workload = CreateSpaceToDepthWorkloadTest<SpaceToDepthWorkloadType, DataType>(factory, graph);
945 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
946 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
954 ClSpaceToDepthWorkloadTest<ClSpaceToDepthWorkload, armnn::DataType::Float32>();
959 ClSpaceToDepthWorkloadTest<ClSpaceToDepthWorkload, armnn::DataType::Float16>();
964 ClSpaceToDepthWorkloadTest<ClSpaceToDepthWorkload, armnn::DataType::QAsymmU8>();
969 ClSpaceToDepthWorkloadTest<ClSpaceToDepthWorkload, armnn::DataType::QSymmS16>();
972 template <armnn::DataType DataType>
973 static void ClCreateStackWorkloadTest(
const std::initializer_list<unsigned int>& inputShape,
974 const std::initializer_list<unsigned int>& outputShape,
976 unsigned int numInputs)
980 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
982 auto workload = CreateStackWorkloadTest<ClStackWorkload, DataType>(factory,
991 for (
unsigned int i = 0; i < numInputs; ++i)
993 auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[i]);
996 auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
1002 ClCreateStackWorkloadTest<armnn::DataType::Float32>({ 3, 4, 5 }, { 3, 4, 2, 5 }, 2, 2);
1007 ClCreateStackWorkloadTest<armnn::DataType::Float16>({ 3, 4, 5 }, { 3, 4, 2, 5 }, 2, 2);
1012 ClCreateStackWorkloadTest<armnn::DataType::QAsymmU8>({ 3, 4, 5 }, { 3, 4, 2, 5 }, 2, 2);
1015 template <
typename QuantizedLstmWorkloadType>
1016 static void ClCreateQuantizedLstmWorkloadTest()
1023 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
1025 auto workload = CreateQuantizedLstmWorkloadTest<QuantizedLstmWorkloadType>(factory, graph);
1029 IAclTensorHandle* inputHandle = polymorphic_downcast<IAclTensorHandle*>(queueDescriptor.m_Inputs[0]);
1031 BOOST_TEST((inputHandle->
GetDataType() == arm_compute::DataType::QASYMM8));
1033 IAclTensorHandle* cellStateInHandle = polymorphic_downcast<IAclTensorHandle*>(queueDescriptor.m_Inputs[1]);
1035 BOOST_TEST((cellStateInHandle->
GetDataType() == arm_compute::DataType::QSYMM16));
1037 IAclTensorHandle* outputStateInHandle = polymorphic_downcast<IAclTensorHandle*>(queueDescriptor.m_Inputs[2]);
1039 BOOST_TEST((outputStateInHandle->
GetDataType() == arm_compute::DataType::QASYMM8));
1041 IAclTensorHandle* cellStateOutHandle = polymorphic_downcast<IAclTensorHandle*>(queueDescriptor.m_Outputs[0]);
1043 BOOST_TEST((cellStateOutHandle->
GetDataType() == arm_compute::DataType::QSYMM16));
1045 IAclTensorHandle* outputStateOutHandle = polymorphic_downcast<IAclTensorHandle*>(queueDescriptor.m_Outputs[1]);
1047 BOOST_TEST((outputStateOutHandle->
GetDataType() == arm_compute::DataType::QASYMM8));
1052 ClCreateQuantizedLstmWorkloadTest<ClQuantizedLstmWorkload>();
DestType polymorphic_downcast(SourceType value)
BOOST_AUTO_TEST_CASE(CreateActivationFloatWorkload)
virtual arm_compute::DataType GetDataType() const =0
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
virtual TensorShape GetShape() const =0
Get the number of elements for each dimension ordered from slowest iterating dimension to fastest ite...
This layer represents an addition operation.
BOOST_AUTO_TEST_SUITE_END()
This layer represents a subtraction operation.
std::vector< ITensorHandle * > m_Outputs
boost::test_tools::predicate_result CompareIClTensorHandleShape(IClTensorHandle *tensorHandle, std::initializer_list< unsigned int > expectedDimensions)
This layer represents a division operation.
std::vector< ITensorHandle * > m_Inputs
This layer represents a multiplication operation.
arm_compute::CLSubTensor & GetTensor() override