blob: 9d4b3b9367c11e801e515ca30ec77dbab887db3f [file] [log] [blame]
David Monahan8a570462023-11-22 13:24:25 +00001//
Tracy Narinee7d27852024-01-26 09:13:19 +00002// Copyright © 2022-2024 Arm Ltd and Contributors. All rights reserved.
David Monahan8a570462023-11-22 13:24:25 +00003// SPDX-License-Identifier: MIT
4//
5
6#include <armnn/Optional.hpp>
7#include <armnn/Types.hpp>
8
9#include <gpuFsa/GpuFsaLayerSupport.hpp>
10
11#include <doctest/doctest.h>
12
13#include <iostream>
14
15using namespace armnn;
16
17TEST_SUITE("GpuFsaLayerSupport")
18{
19
20TEST_CASE("IsLayerSupportedGpuFsaConv2d")
21{
22 TensorInfo inputInfo ({ 1, 5, 5, 1 }, DataType::Float32);
23 TensorInfo outputInfo({ 1, 3, 3, 1 }, DataType::Float32);
24 TensorInfo weightsInfo({ 1, 3, 3, 1 }, DataType::Float32, 0.0f, 0, true);
25 TensorInfo biasesInfo ({ 1 }, DataType::Float32, 0.0f, 0, true);
26
27 Convolution2dDescriptor desc;
28 desc.m_BiasEnabled = true;
29 desc.m_DataLayout = DataLayout::NHWC;
30
31 GpuFsaLayerSupport supportChecker;
32 std::string reasonIfNotSupported;
33 auto supported = supportChecker.IsLayerSupported(LayerType::Convolution2d,
34 {inputInfo, outputInfo, weightsInfo, biasesInfo},
35 desc,
36 EmptyOptional(),
37 EmptyOptional(),
38 reasonIfNotSupported);
39 CHECK(supported);
40}
41
42TEST_CASE("IsLayerSupportedGpuFsaConv2dUnsupported")
43{
44 TensorInfo inputInfo ({ 1, 5, 5, 1 }, DataType::Float32);
45 TensorInfo outputInfo({ 1, 3, 3, 1 }, DataType::Float32);
46 TensorInfo weightsInfo({ 1, 3, 3, 1 }, DataType::Float32, 0.0f, 0, true);
47
48 // NCHW is unsupported.
49 Convolution2dDescriptor desc;
50 desc.m_DataLayout = DataLayout::NCHW;
51
52 GpuFsaLayerSupport supportChecker;
53 std::string reasonIfNotSupported;
54 auto supported = supportChecker.IsLayerSupported(LayerType::Convolution2d,
55 {inputInfo, outputInfo, weightsInfo, TensorInfo()},
56 desc,
57 EmptyOptional(),
58 EmptyOptional(),
59 reasonIfNotSupported);
60 CHECK(!supported);
61 REQUIRE(reasonIfNotSupported.find("NCHW not supported by this kernel") != std::string::npos);
62}
63
Tracy Narinee7d27852024-01-26 09:13:19 +000064TEST_CASE("IsLayerSupportedGpuFsaElementWiseBinaryAdd")
65{
66 TensorInfo input0Info({ 2, 2 }, DataType::Float32);
67 TensorInfo input1Info({ 2, 2 }, DataType::Float32);
68 TensorInfo outputInfo({ 2, 2 }, DataType::Float32);
69
70 ElementwiseBinaryDescriptor desc;
71 desc.m_Operation = BinaryOperation::Add;
72
73 GpuFsaLayerSupport supportChecker;
74 std::string reasonIfNotSupported;
75 auto supported = supportChecker.IsLayerSupported(LayerType::ElementwiseBinary,
76 {input0Info, input1Info, outputInfo},
77 desc,
78 EmptyOptional(),
79 EmptyOptional(),
80 reasonIfNotSupported);
81 CHECK(supported);
82}
83
John Mcloughlin829e13e2024-01-31 11:00:27 +000084TEST_CASE("IsLayerSupportedGpuFsaElementWiseBinarySub")
85{
86 TensorInfo input0Info({ 2, 2 }, DataType::Float32);
87 TensorInfo input1Info({ 2, 2 }, DataType::Float32);
88 TensorInfo outputInfo({ 2, 2 }, DataType::Float32);
89
90 ElementwiseBinaryDescriptor desc;
91 desc.m_Operation = BinaryOperation::Sub;
92
93 GpuFsaLayerSupport supportChecker;
94 std::string reasonIfNotSupported;
95 auto supported = supportChecker.IsLayerSupported(LayerType::ElementwiseBinary,
96 {input0Info, input1Info, outputInfo},
97 desc,
98 EmptyOptional(),
99 EmptyOptional(),
100 reasonIfNotSupported);
101 CHECK(supported);
102}
103
David Monahan8a570462023-11-22 13:24:25 +0000104}