| 91 | GEMMLowpDequantizedMatrixMultiplyValidationFixture<Tensor, Accessor, NEGEMMLowpMatrixMultiplyCore, half>; |
| 92 | |
| 93 | DATA_TEST_CASE(Configuration, |
| 94 | framework::DatasetMode::ALL, |
| 95 | framework::dataset::concat(datasets::SmallGEMMLowpDataset(), datasets::LargeGEMMLowpDataset()), |
| 96 | shape_a, |
| 97 | shape_b, |
| 98 | shape_c, |
| 99 | a_offset, |
| 100 | b_offset) |
| 101 | { |
| 102 | // Create tensors |
| 103 | Tensor a = create_tensor<Tensor>(shape_a, DataType::QASYMM8); |
| 104 | Tensor b = create_tensor<Tensor>(shape_b, DataType::QASYMM8); |
| 105 | Tensor c = create_tensor<Tensor>(shape_c, DataType::S32); |
| 106 | |
| 107 | a.info()->set_quantization_info(QuantizationInfo(1.0f / 255, a_offset)); |
| 108 | b.info()->set_quantization_info(QuantizationInfo(1.0f / 255, b_offset)); |
| 109 | |
| 110 | ARM_COMPUTE_EXPECT(a.info()->is_resizable(), framework::LogLevel::ERRORS); |
| 111 | ARM_COMPUTE_EXPECT(b.info()->is_resizable(), framework::LogLevel::ERRORS); |
| 112 | ARM_COMPUTE_EXPECT(c.info()->is_resizable(), framework::LogLevel::ERRORS); |
| 113 | |
| 114 | // Create and configure function |
| 115 | NEGEMMLowpMatrixMultiplyCore gemmlowp_mm; |
| 116 | gemmlowp_mm.configure(&a, &b, nullptr, &c); |
| 117 | |
| 118 | // Validate padding is zero |
| 119 | validate(a.info()->padding(), PaddingSize()); |
| 120 | validate(b.info()->padding(), PaddingSize()); |
| 121 | validate(c.info()->padding(), PaddingSize()); |
| 122 | } |
| 123 | // accumulation is not supported for Int8/UInt8 in aarch32 |
| 124 | #ifdef __aarch64__ |
| 125 | DATA_TEST_CASE(ValidateAccumulate, |
no test coverage detected