27 #include "tests/datasets/LargeMatMulDataset.h"
28 #include "tests/datasets/SmallMatMulDataset.h"
33 #include "tests/validation/fixtures/MatMulFixture.h"
51 constexpr AbsoluteTolerance<int32_t> tolerance_qasymm8(1);
96 make(
"TensorIsConst", {
false,
false,
false,
false, false ,
false,
true,
false,
false,
false}),
97 make(
"Expected", {
false,
false,
false,
false,
true,
true,
false,
true,
true,
false })),
100 TensorInfo a{a_info};
101 TensorInfo
b{b_info};
102 a.set_are_values_constant(are_tensors_const);
103 b.set_are_values_constant(are_tensors_const);
108 CpuMatMulSettings());
115 template <
typename T>
116 using NEMatMulFixture = MatMulValidationWithActivationFixture<Tensor, Accessor, NEMatMul, CpuMatMulSettings, T>;
119 template <
typename T>
122 template <
typename T>
125 template <
typename T>
127 MatMulValidationWithDynamicTensorsFixture<Tensor, Accessor, NEMatMul, CpuMatMulSettings, T>;
129 template <
typename T>
137 combine(datasets::SmallMatMulDataset(),
138 make("TransposeA", {
false,
true}),
139 make(
"TransposeB", {
false,
true}),
141 make(
"ActivationInfo",
153 combine(datasets::LargeMatMulDataset(),
154 make(
"TransposeA", {
false,
true}),
155 make(
"TransposeB", {
false,
true}),
157 make(
"ActivationInfo",
169 combine(datasets::HighDimensionalMatMulDataset(),
170 make(
"TransposeA", {
false,
true}),
171 make(
"TransposeB", {
false,
true}),
173 make(
"ActivationInfo",
186 combine(datasets::SmallMatMulDataset(),
187 make(
"TransposeA", {
false,
true}),
188 make(
"TransposeB", {
false,
true}),
190 make(
"ActivationInfo",
195 make(
"NumberOfRuns", 5)))
202 #ifdef ARM_COMPUTE_ENABLE_BF16
204 constexpr AbsoluteTolerance<float> tolerance_bf16(0.02f);
207 NEMatMulFastMathFixture<float>,
209 combine(datasets::SmallMatMulDataset(),
210 make(
"TransposeA", {
false,
true}),
211 make(
"TransposeB", {
false,
true}),
213 make(
"ActivationInfo", {ActivationLayerInfo()}),
214 make(
"RunTimes", {0}),
215 make(
"Settings", {CpuMatMulSettings().fast_math(
true)}),
216 make(
"LhsQInfo", {QuantizationInfo()}),
217 make(
"RhsQInfo", {QuantizationInfo()}),
218 make(
"OutQInfo", {QuantizationInfo()})))
221 validate(Accessor(_target), _reference, tolerance_bf16);
224 #ifdef ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS
226 NEMatMulFixedFormatFixture<bfloat16>,
228 combine(datasets::TinyMatMulDataset(),
229 make(
"TransposeA", {
false}),
230 make(
"TransposeB", {
false}),
232 make(
"ActivationInfo", {ActivationLayerInfo()}),
233 make(
"RunTimes", {0}),
234 make(
"Settings", {CpuMatMulSettings().fast_math(
true).fixed_format(
true)}),
235 make(
"LhsQInfo", {QuantizationInfo()}),
236 make(
"RhsQInfo", {QuantizationInfo()}),
237 make(
"OutQInfo", {QuantizationInfo()})))
242 validate(Accessor(_target), _reference, tolerance_bf16);
248 NEMatMulFastMathFixture<float>,
250 combine(datasets::LargeMatMulDataset(),
251 make(
"TransposeA", {
false,
true}),
252 make(
"TransposeB", {
false,
true}),
254 make(
"ActivationInfo", {ActivationLayerInfo()}),
255 make(
"RunTimes", {0}),
256 make(
"Settings", {CpuMatMulSettings().fast_math(
true)}),
257 make(
"LhsQInfo", {QuantizationInfo()}),
258 make(
"RhsQInfo", {QuantizationInfo()}),
259 make(
"OutQInfo", {QuantizationInfo()})))
262 validate(Accessor(_target), _reference, tolerance_bf16, 0.01 );
267 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
270 NEMatMulFixture<half>,
272 combine(datasets::SmallMatMulDataset(),
273 make(
"TransposeA", {
false,
true}),
274 make(
"TransposeB", {
false,
true}),
276 make(
"ActivationInfo",
278 ActivationLayerInfo(),
279 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
286 NEMatMulFixture<half>,
288 combine(datasets::LargeMatMulDataset(),
289 make(
"TransposeA", {
false,
true}),
290 make(
"TransposeB", {
false,
true}),
292 make(
"ActivationInfo",
294 ActivationLayerInfo(),
295 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
302 NEMatMulDynamicTensorsFixture<half>,
304 combine(datasets::SmallMatMulDataset(),
305 make(
"TransposeA", {
false,
true}),
306 make(
"TransposeB", {
false,
true}),
308 make(
"ActivationInfo",
310 ActivationLayerInfo(),
311 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
313 make(
"NumberOfRuns", 5)))
323 #ifdef __aarch64__ // All the GeMM CPU assembly kernels for integer datatypes require aarch64
329 NEQuantizedMatMulFixture<uint8_t>,
331 combine(datasets::SmallMatMulDataset(),
332 make(
"TransposeA", {
false,
true}),
333 make(
"TransposeB", {
false,
true}),
335 make(
"ActivationInfo",
337 ActivationLayerInfo(),
338 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
340 make(
"NumberOfExtraRuns", {0, 1}),
341 make(
"LhsQInfo", {QuantizationInfo(1.f / 50, 1)}),
342 make(
"RhsQInfo", {QuantizationInfo(1.f / 30, -1)}),
343 make(
"OutQInfo", {QuantizationInfo(1.f, 2)})))
346 validate(Accessor(_target), _reference, tolerance_qasymm8);
350 NEQuantizedMatMulFixture<uint8_t>,
352 combine(datasets::SmallerMatMulDataset(),
353 make(
"TransposeA", {
false,
true}),
354 make(
"TransposeB", {
false,
true}),
356 make(
"ActivationInfo",
358 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
359 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU)
361 make(
"NumberOfExtraRuns", {0, 1}),
362 make(
"LhsQInfo", {QuantizationInfo(1.f / 50, 1)}),
363 make(
"RhsQInfo", {QuantizationInfo(1.f / 30, -1)}),
364 make(
"OutQInfo", {QuantizationInfo(1.f, 2)})))
367 validate(Accessor(_target), _reference, tolerance_qasymm8);
371 NEQuantizedMatMulFixture<uint8_t>,
373 combine(datasets::LargeMatMulDataset(),
374 make(
"TransposeA", {
false,
true}),
375 make(
"TransposeB", {
false,
true}),
377 make(
"ActivationInfo",
379 ActivationLayerInfo(),
380 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
382 make(
"NumberOfExtraRuns", {0, 1}),
383 make(
"LhsQInfo", {QuantizationInfo(1.f / 100, 1)}),
384 make(
"RhsQInfo", {QuantizationInfo(1.f / 200, -1)}),
385 make(
"OutQInfo", {QuantizationInfo(1.f, 2)})))
388 validate(Accessor(_target), _reference, tolerance_qasymm8);
398 combine(datasets::SmallMatMulDataset(),
399 make("TransposeA", {
false,
true}),
400 make(
"TransposeB", {
false,
true}),
402 make(
"ActivationInfo",
404 ActivationLayerInfo(),
405 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
407 make(
"NumberOfExtraRuns", {0, 1}),
408 make(
"LhsQInfo", {QuantizationInfo(1.f / 40, -2)}),
409 make(
"RhsQInfo", {QuantizationInfo(1.f / 50, 1)}),
410 make(
"OutQInfo", {QuantizationInfo(1.f, 1)})))
417 NEQuantizedMatMulFixture<int8_t>,
419 combine(datasets::SmallerMatMulDataset(),
420 make(
"TransposeA", {
false,
true}),
421 make(
"TransposeB", {
false,
true}),
423 make(
"ActivationInfo",
425 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
426 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU)
428 make(
"NumberOfExtraRuns", {0, 1}),
429 make(
"LhsQInfo", {QuantizationInfo(1.f / 40, -2)}),
430 make(
"RhsQInfo", {QuantizationInfo(1.f / 50, 1)}),
431 make(
"OutQInfo", {QuantizationInfo(1.f, 1)})))
438 NEQuantizedMatMulFixture<int8_t>,
440 combine(datasets::LargeMatMulDataset(),
441 make(
"TransposeA", {
false,
true}),
442 make(
"TransposeB", {
false,
true}),
444 make(
"ActivationInfo",
446 ActivationLayerInfo(),
447 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
449 make(
"NumberOfExtraRuns", {0, 1}),
450 make(
"LhsQInfo", {QuantizationInfo(1.f / 150, -2)}),
451 make(
"RhsQInfo", {QuantizationInfo(1.f / 250, 1)}),
452 make(
"OutQInfo", {QuantizationInfo(1.f, 1)})))
461 #endif // __aarch64__