Support QC8 IGEMM microkernels
- Minimal set of 8-bit fixed-point microkernels with per-channel quantization
(QC8) optimized for AVX2.
- Extend packing functions to allow extra space after the kernel data.
Per-channel quantization parameters are later packed into that space.
- Extend GemmMicrokernelTester to support unit testing of QC8 IGEMM.
PiperOrigin-RevId: 377299164
diff --git a/BUILD.bazel b/BUILD.bazel
index 747e8d3..d0e529b 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -3543,6 +3543,9 @@
"src/qc8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c",
"src/qc8-gemm/gen/3x8c8-minmax-fp32-avx2.c",
"src/qc8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c",
+ "src/qc8-igemm/gen/1x8c8-minmax-fp32-avx2.c",
+ "src/qc8-igemm/gen/2x8c8-minmax-fp32-avx2.c",
+ "src/qc8-igemm/gen/3x8c8-minmax-fp32-avx2.c",
"src/qs8-dwconv/gen/up8x9-minmax-fp32-avx2-mul32.c",
"src/qs8-dwconv/gen/up8x9-minmax-gemmlowp-avx2-mul32.c",
"src/qs8-dwconv/gen/up8x25-minmax-fp32-avx2-mul32.c",
@@ -7123,6 +7126,17 @@
)
xnnpack_unit_test(
+ name = "qc8_igemm_minmax_fp32_test",
+ timeout = "moderate",
+ srcs = [
+ "test/qc8-igemm-minmax-fp32.cc",
+ "test/gemm-microkernel-tester.h",
+ "src/xnnpack/AlignedAllocator.h",
+ ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
+ deps = MICROKERNEL_TEST_DEPS + [":packing"],
+)
+
+xnnpack_unit_test(
name = "qs8_dwconv_minmax_gemmlowp_test",
srcs = [
"test/qs8-dwconv-minmax-gemmlowp.cc",