| 5 | using namespace megcc::KernelGen; |
| 6 | |
| 7 | TEST(ARMCOMMON, ConvBiasChannelWiseNCHW4Int8) { |
| 8 | #ifdef __aarch64__ |
| 9 | Checker<ConvBiasForward> checker(Arch::ARM64); |
| 10 | #else |
| 11 | Checker<ConvBiasForward> checker(Arch::ARMV7); |
| 12 | #endif |
| 13 | checker.set_dtype(0, dtype::QuantizedS8(2.5f)) |
| 14 | .set_dtype(1, dtype::QuantizedS8(2.5f)) |
| 15 | .set_dtype(2, dtype::QuantizedS32(6.25f)) |
| 16 | .set_dtype(4, dtype::QuantizedS8(40.25f)); |
| 17 | checker.set_kernel_symbol("ArmCommon_chanwise.+"); |
| 18 | ConvBiasForward::Param param; |
| 19 | param.compute_mode = ConvBiasForward::Param::ComputeMode::DEFAULT; |
| 20 | param.format = ConvBiasForward::Param::Format::NCHW44; |
| 21 | param.sparse = ConvBiasForward::Param::Sparse::GROUP; |
| 22 | for (size_t pad : {0, 1, 2}) |
| 23 | for (size_t stride : {1, 2}) { |
| 24 | for (size_t kernel : {3, 5}) { |
| 25 | param.pad_h = pad; |
| 26 | param.pad_w = pad; |
| 27 | param.nonlineMode = ConvBiasForward::Param::NonlineMode::RELU; |
| 28 | param.stride_h = stride; |
| 29 | param.stride_w = stride; |
| 30 | checker.set_param(param); |
| 31 | checker.execs( |
| 32 | {{2, 8, 13, 23, 4}, |
| 33 | {8, 1, 1, kernel, kernel, 4}, |
| 34 | {1, 8, 1, 1, 4}, |
| 35 | {}, |
| 36 | {}}); |
| 37 | checker.execs( |
| 38 | {{2, 8, 14, 28, 4}, {8, 1, 1, kernel, kernel, 4}, {}, {}, {}}); |
| 39 | param.nonlineMode = ConvBiasForward::Param::NonlineMode::IDENTITY; |
| 40 | checker.set_param(param); |
| 41 | checker.execs( |
| 42 | {{4, 3, 5, 11, 4}, |
| 43 | {3, 1, 1, kernel, kernel, 4}, |
| 44 | {1, 3, 1, 1, 4}, |
| 45 | {}, |
| 46 | {}}); |
| 47 | checker.execs( |
| 48 | {{4, 3, 5, 11, 4}, {3, 1, 1, kernel, kernel, 4}, {}, {}, {}}); |
| 49 | } |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | TEST(ARMCOMMON, ConvBiasChannelWiseNCHW4K3) { |
| 54 | #ifdef __aarch64__ |