blob: 8f6027df586cf44b8e01155f13ed9ae543e2396e [file] [log] [blame]
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +00001//
2// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "DelegateOptionsTestHelper.hpp"
7
8namespace armnnDelegate
9{
10
11TEST_SUITE("DelegateOptions")
12{
13
14TEST_CASE ("ArmnnDelegateOptimizerOptionsReduceFp32ToFp16")
15{
16 std::stringstream ss;
17 {
18 StreamRedirector redirect(std::cout, ss.rdbuf());
19
20 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
21 std::vector<int32_t> tensorShape { 1, 2, 2, 1 };
22 std::vector<float> inputData = { 1, 2, 3, 4 };
23 std::vector<float> divData = { 2, 2, 3, 4 };
24 std::vector<float> expectedResult = { 1, 2, 2, 2 };
25
26 // Enable ReduceFp32ToFp16
27 armnn::OptimizerOptions optimizerOptions(true, true, false, false);
Narumol Prangnawarat74a3cf52021-01-29 15:38:54 +000028 armnnDelegate::DelegateOptions delegateOptions(backends, optimizerOptions);
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000029
30 DelegateOptionTest<float>(::tflite::TensorType_FLOAT32,
31 backends,
32 tensorShape,
33 inputData,
34 inputData,
35 divData,
36 expectedResult,
37 delegateOptions);
38 }
39 // ReduceFp32ToFp16 option is enabled
40 CHECK(ss.str().find("convert_fp32_to_fp16") != std::string::npos);
41 CHECK(ss.str().find("convert_fp16_to_fp32") != std::string::npos);
42}
43
44TEST_CASE ("ArmnnDelegateOptimizerOptionsDebug")
45{
46 std::stringstream ss;
47 {
48 StreamRedirector redirect(std::cout, ss.rdbuf());
49
50 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
51 std::vector<int32_t> tensorShape { 1, 2, 2, 1 };
52 std::vector<float> inputData = { 1, 2, 3, 4 };
53 std::vector<float> divData = { 2, 2, 3, 4 };
54 std::vector<float> expectedResult = { 1, 2, 2, 2 };
55
56 // Enable Debug
57 armnn::OptimizerOptions optimizerOptions(false, true, false, false);
Narumol Prangnawarat74a3cf52021-01-29 15:38:54 +000058 armnnDelegate::DelegateOptions delegateOptions(backends, optimizerOptions);
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000059
60 DelegateOptionTest<float>(::tflite::TensorType_FLOAT32,
61 backends,
62 tensorShape,
63 inputData,
64 inputData,
65 divData,
66 expectedResult,
67 delegateOptions);
68 }
69 // Debug option triggered.
70 CHECK(ss.str().find("layerGuid") != std::string::npos);
71 CHECK(ss.str().find("layerName") != std::string::npos);
72 CHECK(ss.str().find("outputSlot") != std::string::npos);
73 CHECK(ss.str().find("shape") != std::string::npos);
74 CHECK(ss.str().find("data") != std::string::npos);
75}
76
77TEST_CASE ("ArmnnDelegateOptimizerOptionsDebugFunction")
78{
79 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
80 std::vector<int32_t> tensorShape { 1, 2, 2, 1 };
81 std::vector<float> inputData = { 1, 2, 3, 4 };
82 std::vector<float> divData = { 2, 2, 3, 4 };
83 std::vector<float> expectedResult = { 1, 2, 2, 2 };
84
85 // Enable debug with debug callback function
86 armnn::OptimizerOptions optimizerOptions(false, true, false, false);
87 bool callback = false;
88 auto mockCallback = [&](armnn::LayerGuid guid, unsigned int slotIndex, armnn::ITensorHandle* tensor)
89 {
90 armnn::IgnoreUnused(guid);
91 armnn::IgnoreUnused(slotIndex);
92 armnn::IgnoreUnused(tensor);
93 callback = true;
94 };
95
Francis Murtagh73d3e2e2021-04-29 14:23:04 +010096 armnn::INetworkProperties networkProperties(false, armnn::MemorySource::Undefined, armnn::MemorySource::Undefined);
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000097 armnnDelegate::DelegateOptions delegateOptions(backends,
98 optimizerOptions,
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000099 armnn::EmptyOptional(),
100 armnn::Optional<armnn::DebugCallbackFunction>(mockCallback));
101
102 CHECK(!callback);
103
104 DelegateOptionTest<float>(::tflite::TensorType_FLOAT32,
105 backends,
106 tensorShape,
107 inputData,
108 inputData,
109 divData,
110 expectedResult,
111 delegateOptions);
112
113 // Check that the debug callback function was called.
114 CHECK(callback);
115}
116
117TEST_CASE ("ArmnnDelegateOptimizerOptionsReduceFp32ToBf16")
118{
119 std::stringstream ss;
120 {
121 StreamRedirector redirect(std::cout, ss.rdbuf());
122
123 ReduceFp32ToBf16TestImpl();
124 }
125
126 // ReduceFp32ToBf16 option is enabled
127 CHECK(ss.str().find("convert_fp32_to_bf16") != std::string::npos);
128}
129
130TEST_CASE ("ArmnnDelegateOptimizerOptionsImport")
131{
132 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc, armnn::Compute::CpuRef };
133 std::vector<int32_t> tensorShape { 1, 2, 2, 1 };
134 std::vector<uint8_t> inputData = { 1, 2, 3, 4 };
135 std::vector<uint8_t> divData = { 2, 2, 3, 4 };
Narumol Prangnawarat74a3cf52021-01-29 15:38:54 +0000136 std::vector<uint8_t> expectedResult = { 1, 2, 2, 2 };
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000137
138 armnn::OptimizerOptions optimizerOptions(false, false, false, true);
Narumol Prangnawarat74a3cf52021-01-29 15:38:54 +0000139 armnnDelegate::DelegateOptions delegateOptions(backends, optimizerOptions);
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000140
141 DelegateOptionTest<uint8_t>(::tflite::TensorType_UINT8,
142 backends,
143 tensorShape,
144 inputData,
145 inputData,
146 divData,
147 expectedResult,
148 delegateOptions);
149}
150
151}
152
Matthew Sloyan0a7dc6b2021-02-10 16:50:53 +0000153TEST_SUITE("DelegateOptions_CpuAccTests")
154{
155
156TEST_CASE ("ArmnnDelegateModelOptions_CpuAcc_Test")
157{
158 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
159 std::vector<int32_t> tensorShape { 1, 2, 2, 1 };
160 std::vector<float> inputData = { 1, 2, 3, 4 };
161 std::vector<float> divData = { 2, 2, 3, 4 };
162 std::vector<float> expectedResult = { 1, 2, 2, 2 };
163
164 unsigned int numberOfThreads = 2;
165
166 armnn::ModelOptions modelOptions;
167 armnn::BackendOptions cpuAcc("CpuAcc",
168 {
169 { "FastMathEnabled", true },
170 { "NumberOfThreads", numberOfThreads }
171 });
172 modelOptions.push_back(cpuAcc);
173
174 armnn::OptimizerOptions optimizerOptions(false, false, false, false, modelOptions);
175 armnnDelegate::DelegateOptions delegateOptions(backends, optimizerOptions);
176
177 DelegateOptionTest<float>(::tflite::TensorType_FLOAT32,
178 backends,
179 tensorShape,
180 inputData,
181 inputData,
182 divData,
183 expectedResult,
184 delegateOptions);
185}
186
187}
188
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000189} // namespace armnnDelegate