blob: b885bfe4af8c33dc2f6f5cb2ca86b2f9df0c5b37 [file] [log] [blame]
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +00001/*
Gian Marco Iodicebacfec52019-01-11 11:30:55 +00002 * Copyright (c) 2018-2019 ARM Limited.
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +00003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/core/CL/kernels/CLGEMMMatrixMultiplyReshapedKernel.h"
25#include "arm_compute/core/CL/kernels/CLGEMMReshapeLHSMatrixKernel.h"
26#include "arm_compute/core/CL/kernels/CLGEMMReshapeRHSMatrixKernel.h"
Gian Marco Iodice7026b302019-06-26 17:18:11 +010027#include "arm_compute/core/KernelDescriptors.h"
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +000028#include "arm_compute/core/Types.h"
29#include "arm_compute/core/utils/misc/ShapeCalculator.h"
30#include "arm_compute/runtime/CL/CLTensor.h"
31#include "arm_compute/runtime/CL/CLTensorAllocator.h"
32#include "tests/CL/CLAccessor.h"
33#include "tests/CL/Helper.h"
34#include "tests/PaddingCalculator.h"
35#include "tests/datasets/ShapeDatasets.h"
36#include "tests/framework/Asserts.h"
37#include "tests/framework/Macros.h"
38#include "tests/framework/datasets/Datasets.h"
39#include "tests/validation/Validation.h"
40#include "tests/validation/fixtures/GEMMFixture.h"
41
42namespace arm_compute
43{
44namespace test
45{
46namespace validation
47{
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000048using namespace arm_compute::misc::shape_calculator;
49
50// Create function for CLGEMMReshapeLHSMatrixKernel
Gian Marco Iodicebacfec52019-01-11 11:30:55 +000051using CLGEMMReshapeLHSMatrix = CLSynthetizeFunction<CLGEMMReshapeLHSMatrixKernel>;
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000052
53// Create function for CLGEMMReshapeRHSMatrixKernel
Gian Marco Iodicebacfec52019-01-11 11:30:55 +000054using CLGEMMReshapeRHSMatrix = CLSynthetizeFunction<CLGEMMReshapeRHSMatrixKernel>;
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000055
56// Create function for CLGEMMMatrixMultiplyReshapedKernel
57using CLGEMMMatrixMultiplyReshaped = CLSynthetizeFunction<CLGEMMMatrixMultiplyReshapedKernel>;
58
59// Fixture for CLGEMMMatrixMultiplyReshaped
60template <typename T>
61using CLGEMMMatrixMultiplyReshapedFixture = GEMMMatrixMultiplyReshapedValidationFixture<CLTensor, CLAccessor, T, CLGEMMReshapeLHSMatrix, CLGEMMReshapeRHSMatrix, CLGEMMMatrixMultiplyReshaped>;
62
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +010063// Fixture for CLGEMMMatrixMultiplyReshaped mixed precision
64template <typename T>
65using CLGEMMMatrixMultiplyReshapedMixedPrecisionFixture =
66 GEMMMatrixMultiplyReshapedValidationFixture<CLTensor, CLAccessor, T, CLGEMMReshapeLHSMatrix, CLGEMMReshapeRHSMatrix, CLGEMMMatrixMultiplyReshaped, true>;
67
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000068// Fixture for CLGEMMMatrixMultiplyReshaped3D
69template <typename T>
70using CLGEMMMatrixMultiplyReshaped3DFixture = GEMMMatrixMultiplyReshaped3DValidationFixture<CLTensor, CLAccessor, T, CLGEMMReshapeLHSMatrix, CLGEMMReshapeRHSMatrix, CLGEMMMatrixMultiplyReshaped>;
71
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +010072// Fixture for CLGEMMMatrixMultiplyReshaped3D mixed precision
73template <typename T>
74using CLGEMMMatrixMultiplyReshaped3DMixedPrecisionFixture =
75 GEMMMatrixMultiplyReshaped3DValidationFixture<CLTensor, CLAccessor, T, CLGEMMReshapeLHSMatrix, CLGEMMReshapeRHSMatrix, CLGEMMMatrixMultiplyReshaped, true>;
76
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +000077namespace
78{
79// *INDENT-OFF*
80// clang-format off
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000081RelativeTolerance<float> rel_tolerance_f32(0.001f);
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +000082constexpr float abs_tolerance_f32(0.0001f);
83
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +010084RelativeTolerance<float> rel_tolerance_f16_mixed_precision(0.001f);
85constexpr float abs_tolerance_f16_mixed_precision(0.01f);
86
Gian Marco Iodice05639f62019-09-24 12:05:06 +010087RelativeTolerance<float> rel_tolerance_f16(0.001f);
88constexpr float abs_tolerance_f16(0.01f);
89
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +000090/** M values to test */
91const auto m_values = framework::dataset::make("M", 37);
92
Gian Marco Iodice9382ab32018-12-17 15:12:07 +000093/** M_W values to test */
94const auto m_w_values = framework::dataset::make("M_W", 5);
95
96/** M_H values to test */
97const auto m_h_values = framework::dataset::make("M_H", 7);
98
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +000099/** N values to test */
100const auto n_values = framework::dataset::make("N", 51);
101
102/** K values to test */
Gian Marco Iodicebacfec52019-01-11 11:30:55 +0000103const auto k_values = framework::dataset::make("K", 23);
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000104
105/** Batch size values to test */
106const auto b_values = framework::dataset::make("batch_size", 1, 3);
107
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100108/** Activation values to test */
109const auto act_values = framework::dataset::make("Activation",
110{
111 ActivationLayerInfo(),
112 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 8.f, 2.f),
113});
114
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100115/** Alpha values to test - Precommit */
116const auto a_values_precommit = framework::dataset::make("alpha", {-0.75f} );
117
118/** Beta values to test - Precommit */
119const auto beta_values_precommit = framework::dataset::make("beta", {-0.35f} );
120
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000121/** M0 values to test - Precommit */
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100122const auto m0_values_precommit = framework::dataset::make("M0", { 4 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000123
124/** N0 values to test - Precommit */
Gian Marco Iodiced820db62019-08-05 14:23:23 +0100125const auto n0_values_precommit = framework::dataset::make("N0", { 4 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000126
127/** K0 values to test - Precommit */
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000128const auto k0_values_precommit = framework::dataset::make("K0", { 4 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000129
130/** V0 values to test - Precommit */
131const auto v0_values_precommit = framework::dataset::make("V0", 1, 3);
132
133/** H0 values to test - Precommit */
134const auto h0_values_precommit = framework::dataset::make("H0", 1, 3);
135
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100136/** Alpha values to test - Nightly */
137const auto a_values_nightly = framework::dataset::make("alpha", {1.0f} );
138
139/** Beta values to test - Nightly */
140const auto beta_values_nightly = framework::dataset::make("beta", {1.0f} );
141
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000142/** M0 values to test - Nightly */
Michele Di Giorgio2568c6b2019-09-17 12:08:46 +0100143const auto m0_values_nightly = framework::dataset::make("M0", { 2, 3, 4, 8 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000144
145/** N0 values to test - Nightly */
Gian Marco Iodicebacfec52019-01-11 11:30:55 +0000146const auto n0_values_nightly = framework::dataset::make("N0", { 2, 3, 4, 8 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000147
148/** K0 values to test - Nightly */
Gian Marco Iodicebacfec52019-01-11 11:30:55 +0000149const auto k0_values_nightly = framework::dataset::make("K0", { 2, 3, 4, 8 });
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000150
151/** V0 values to test - Nightly */
152const auto v0_values_nightly = framework::dataset::make("V0", 1, 4);
153
154/** H0 values to test - Nightly */
155const auto h0_values_nightly = framework::dataset::make("H0", 1, 4);
156
157/** Interleave values to test with LHS matrix */
158const auto i_values_lhs = framework::dataset::make("interleave_lhs", { true, false });
159
160/** Interleave values to test with RHS matrix */
161const auto i_values_rhs = framework::dataset::make("interleave_rhs", { true, false });
162
Gian Marco Iodicee16c8902019-06-14 16:11:10 +0100163/** Broadcast bias from vector to matrix */
Gian Marco Iodiced820db62019-08-05 14:23:23 +0100164const auto broadcast_bias_values = framework::dataset::make("broadcast_bias", { false, true } );
Gian Marco Iodicee16c8902019-06-14 16:11:10 +0100165
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100166/** LHS transposed values */
167const auto lhs_transpose_values = framework::dataset::make("lhs_transpose", { false, true } );
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000168} // namespace
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000169
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000170TEST_SUITE(CL)
171TEST_SUITE(GEMMMatrixMultiplyReshaped)
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000172TEST_SUITE(Float)
173TEST_SUITE(FP32)
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000174
175FIXTURE_DATA_TEST_CASE(RunSmall, CLGEMMMatrixMultiplyReshapedFixture<float>, framework::DatasetMode::ALL,
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100176 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000177 m_values,
178 n_values),
179 k_values),
180 b_values),
181 m0_values_precommit),
182 n0_values_precommit),
183 k0_values_precommit),
184 v0_values_precommit),
185 h0_values_precommit),
186 i_values_lhs),
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000187 i_values_rhs),
188 framework::dataset::make("DataType", DataType::F32)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100189 a_values_precommit),
190 beta_values_precommit),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100191 broadcast_bias_values),
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100192 lhs_transpose_values),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100193 act_values))
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000194{
195 // Validate output
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000196 validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000197}
198
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000199FIXTURE_DATA_TEST_CASE(RunLarge, CLGEMMMatrixMultiplyReshapedFixture<float>, framework::DatasetMode::NIGHTLY,
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100200 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000201 m_values,
202 n_values),
203 k_values),
204 b_values),
205 m0_values_nightly),
206 n0_values_nightly),
207 k0_values_nightly),
208 v0_values_nightly),
209 h0_values_nightly),
210 i_values_lhs),
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000211 i_values_rhs),
212 framework::dataset::make("DataType", DataType::F32)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100213 a_values_nightly),
214 beta_values_nightly),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100215 broadcast_bias_values),
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100216 lhs_transpose_values),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100217 act_values))
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000218{
219 // Validate output
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000220 validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000221}
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000222
223FIXTURE_DATA_TEST_CASE(RunSmall3D, CLGEMMMatrixMultiplyReshaped3DFixture<float>, framework::DatasetMode::ALL,
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100224 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000225 m_w_values,
226 m_h_values),
227 n_values),
228 k_values),
229 b_values),
230 m0_values_precommit),
231 n0_values_precommit),
232 k0_values_precommit),
233 v0_values_precommit),
234 h0_values_precommit),
235 i_values_lhs),
236 i_values_rhs),
237 framework::dataset::make("DataType", DataType::F32)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100238 a_values_precommit),
239 beta_values_precommit),
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100240 lhs_transpose_values),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100241 act_values))
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000242{
243 // Validate output
244 validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
245}
246
247FIXTURE_DATA_TEST_CASE(RunLarge3D, CLGEMMMatrixMultiplyReshaped3DFixture<float>, framework::DatasetMode::NIGHTLY,
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100248 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000249 m_w_values,
250 m_h_values),
251 n_values),
252 k_values),
253 b_values),
254 m0_values_nightly),
255 n0_values_nightly),
256 k0_values_nightly),
257 v0_values_nightly),
258 h0_values_nightly),
259 i_values_lhs),
260 i_values_rhs),
261 framework::dataset::make("DataType", DataType::F32)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100262 a_values_nightly),
263 beta_values_nightly),
Giorgio Arenaae99b6e2019-08-01 14:22:12 +0100264 lhs_transpose_values),
Gian Marco Iodiceca1f4602019-07-16 15:46:48 +0100265 act_values))
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000266{
267 // Validate output
268 validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
269}
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000270TEST_SUITE_END() // FP32
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100271
272TEST_SUITE(FP16)
273
274FIXTURE_DATA_TEST_CASE(RunSmall, CLGEMMMatrixMultiplyReshapedFixture<half>, framework::DatasetMode::ALL,
275 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
276 m_values,
277 n_values),
278 k_values),
279 b_values),
280 m0_values_precommit),
281 n0_values_precommit),
282 k0_values_precommit),
283 v0_values_precommit),
284 h0_values_precommit),
285 i_values_lhs),
286 i_values_rhs),
287 framework::dataset::make("DataType", DataType::F16)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100288 a_values_precommit),
289 beta_values_precommit),
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100290 broadcast_bias_values),
291 lhs_transpose_values),
292 act_values))
293{
294 // Validate output
295 validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
296}
297
298FIXTURE_DATA_TEST_CASE(RunLarge, CLGEMMMatrixMultiplyReshapedFixture<half>, framework::DatasetMode::NIGHTLY,
299 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
300 m_values,
301 n_values),
302 k_values),
303 b_values),
304 m0_values_nightly),
305 n0_values_nightly),
306 k0_values_nightly),
307 v0_values_nightly),
308 h0_values_nightly),
309 i_values_lhs),
310 i_values_rhs),
311 framework::dataset::make("DataType", DataType::F16)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100312 a_values_nightly),
313 beta_values_nightly),
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100314 broadcast_bias_values),
315 lhs_transpose_values),
316 act_values))
317{
318 // Validate output
319 validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
320}
321
322FIXTURE_DATA_TEST_CASE(RunSmall3D, CLGEMMMatrixMultiplyReshaped3DFixture<half>, framework::DatasetMode::ALL,
323 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
324 m_w_values,
325 m_h_values),
326 n_values),
327 k_values),
328 b_values),
329 m0_values_precommit),
330 n0_values_precommit),
331 k0_values_precommit),
332 v0_values_precommit),
333 h0_values_precommit),
334 i_values_lhs),
335 i_values_rhs),
336 framework::dataset::make("DataType", DataType::F16)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100337 a_values_precommit),
338 beta_values_precommit),
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100339 lhs_transpose_values),
340 act_values))
341{
342 // Validate output
343 validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
344}
345
346FIXTURE_DATA_TEST_CASE(RunLarge3D, CLGEMMMatrixMultiplyReshaped3DFixture<half>, framework::DatasetMode::NIGHTLY,
347 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
348 m_w_values,
349 m_h_values),
350 n_values),
351 k_values),
352 b_values),
353 m0_values_nightly),
354 n0_values_nightly),
355 k0_values_nightly),
356 v0_values_nightly),
357 h0_values_nightly),
358 i_values_lhs),
359 i_values_rhs),
360 framework::dataset::make("DataType", DataType::F16)),
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100361 a_values_nightly),
362 beta_values_nightly),
Gian Marco Iodice05639f62019-09-24 12:05:06 +0100363 lhs_transpose_values),
364 act_values))
365{
366 // Validate output
367 validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
368}
369TEST_SUITE_END() // FP16
Gian Marco Iodice0c17aa22019-09-27 09:23:15 +0100370
371TEST_SUITE(MixedPrecision)
372
373FIXTURE_DATA_TEST_CASE(RunSmall, CLGEMMMatrixMultiplyReshapedMixedPrecisionFixture<half>, framework::DatasetMode::ALL,
374 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
375 m_values,
376 n_values),
377 k_values),
378 b_values),
379 m0_values_precommit),
380 n0_values_precommit),
381 k0_values_precommit),
382 v0_values_precommit),
383 h0_values_precommit),
384 i_values_lhs),
385 i_values_rhs),
386 framework::dataset::make("DataType", DataType::F16)),
387 a_values_precommit),
388 beta_values_precommit),
389 broadcast_bias_values),
390 lhs_transpose_values),
391 act_values))
392{
393 // Validate output
394 validate(CLAccessor(_target), _reference, rel_tolerance_f16_mixed_precision, 0.f, abs_tolerance_f16_mixed_precision);
395}
396
397FIXTURE_DATA_TEST_CASE(RunLarge, CLGEMMMatrixMultiplyReshapedMixedPrecisionFixture<half>, framework::DatasetMode::NIGHTLY,
398 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
399 m_values,
400 n_values),
401 k_values),
402 b_values),
403 m0_values_nightly),
404 n0_values_nightly),
405 k0_values_nightly),
406 v0_values_nightly),
407 h0_values_nightly),
408 i_values_lhs),
409 i_values_rhs),
410 framework::dataset::make("DataType", DataType::F16)),
411 a_values_nightly),
412 beta_values_nightly),
413 broadcast_bias_values),
414 lhs_transpose_values),
415 act_values))
416{
417 // Validate output
418 validate(CLAccessor(_target), _reference, rel_tolerance_f16_mixed_precision, 0.f, abs_tolerance_f16_mixed_precision);
419}
420
421FIXTURE_DATA_TEST_CASE(RunSmall3D, CLGEMMMatrixMultiplyReshaped3DMixedPrecisionFixture<half>, framework::DatasetMode::ALL,
422 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
423 m_w_values,
424 m_h_values),
425 n_values),
426 k_values),
427 b_values),
428 m0_values_precommit),
429 n0_values_precommit),
430 k0_values_precommit),
431 v0_values_precommit),
432 h0_values_precommit),
433 i_values_lhs),
434 i_values_rhs),
435 framework::dataset::make("DataType", DataType::F16)),
436 a_values_precommit),
437 beta_values_precommit),
438 lhs_transpose_values),
439 act_values))
440{
441 // Validate output
442 validate(CLAccessor(_target), _reference, rel_tolerance_f16_mixed_precision, 0.f, abs_tolerance_f16_mixed_precision);
443}
444
445FIXTURE_DATA_TEST_CASE(RunLarge3D, CLGEMMMatrixMultiplyReshaped3DMixedPrecisionFixture<half>, framework::DatasetMode::NIGHTLY,
446 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
447 m_w_values,
448 m_h_values),
449 n_values),
450 k_values),
451 b_values),
452 m0_values_nightly),
453 n0_values_nightly),
454 k0_values_nightly),
455 v0_values_nightly),
456 h0_values_nightly),
457 i_values_lhs),
458 i_values_rhs),
459 framework::dataset::make("DataType", DataType::F16)),
460 a_values_nightly),
461 beta_values_nightly),
462 lhs_transpose_values),
463 act_values))
464{
465 // Validate output
466 validate(CLAccessor(_target), _reference, rel_tolerance_f16_mixed_precision, 0.f, abs_tolerance_f16_mixed_precision);
467}
468TEST_SUITE_END() // MixedPrecision
Gian Marco Iodice9382ab32018-12-17 15:12:07 +0000469TEST_SUITE_END() // Float
Gian Marco Iodiced1f54762019-07-19 09:54:47 +0100470TEST_SUITE_END() // GEMMMatrixMultiplyReshaped
Gian Marco Iodicebf9731e2018-12-12 10:18:04 +0000471TEST_SUITE_END() // CL
472} // namespace validation
473} // namespace test
Michele Di Giorgio2568c6b2019-09-17 12:08:46 +0100474} // namespace arm_compute