Commit 0101041
feat(backend): first-class Q5_K packed matmul + ARM NEON kernels
Adds Q5_K as a packed in-kernel dequant-matmul format (previously Q5_K was
only eagerly decoded to FP32 on load), mirroring the existing Q4_K plumbing,
and hand-written ARM NEON paths for the native CPU kernels.
Q5_K (256-elt / 176-byte super-block: d, dMin, 12 packed scales, 32-byte qh
high-bit plane, 128-byte qs low nibbles; 5-bit code = lowNibble | (5th<<4)):
- TensorEncoding.Q5_K; Q5_KTensorData / Q5_KBlockTensorData (5th-bit fold).
- Q5KMatmulKernel SPI + matmulQ5K()/"Q5_K" in KernelProvider.supports().
- ScalarQ5_KMatmulKernel (commonMain/KN), PanamaVectorQ5_KMatmulKernel (JVM),
native C skainet_q5k_matmul + NativeQ5KMatmulKernel (FFM); all registered.
- DefaultCpuOps matmul dispatch + lazy-transpose branches.
- StreamingGgufParametersLoader: Q5_K + Q6_K packed branches (a Q5_K_M GGUF
now loads end-to-end instead of SKIP'ing most tensors).
Tests: Q5_KBlockTensorData bit-exact vs DequantOps golden across blocks;
native<->Panama<->scalar matmul parity; KernelSupportMatrixTest gate updated.
ARM NEON (behind #if __ARM_NEON in skainet_simd.h; x86 keeps the scalar
fallback, re-verified green):
- fp32 (broadcast+vfmaq), q8_0 (widen int8->f32+vfmaq), q4k/q5k (nibble
unpack + dual code/input accumulators; q5k folds the qh 5th bit via a
runtime-count vshlq_u8).
- CMake aarch64 branch: -march=armv8.2-a+fp16+dotprod (no +i8mm — A55 lacks
it). Cross toolchain-aarch64.cmake + opt-in -PcrossArm64 gradle tasks;
default x86 build unaffected.
BOARD-VERIFY-PENDING: the NEON paths are aarch64-syntax-validated (clang
--target=aarch64) but not executed (x86 host, no QEMU). Run the parity tests
under qemu-aarch64 or on the SL2610 before relying on them.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 6d85369 commit 0101041
25 files changed
Lines changed: 1525 additions & 4 deletions
File tree
- skainet-backends
- skainet-backend-api/src/commonMain/kotlin/sk/ainet/backend/api/kernel
- skainet-backend-cpu/src
- commonMain/kotlin/sk/ainet/exec
- kernel
- tensor/ops
- jvmMain/kotlin/sk/ainet/exec/kernel
- jvmTest/kotlin/sk/ainet/exec/kernel
- skainet-backend-native-cpu
- native
- include
- src
- src
- jvmMain/kotlin/sk/ainet/exec/kernel
- jvmTest/kotlin/sk/ainet/exec/kernel
- skainet-io/skainet-io-gguf/src
- commonMain/kotlin/sk/ainet/io/gguf
- jvmTest/kotlin/sk/ainet/io/gguf
- skainet-lang/skainet-lang-core/src/commonMain/kotlin/sk/ainet/lang/tensor
- data
- storage
Lines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
82 | 88 | | |
83 | 89 | | |
84 | 90 | | |
| |||
126 | 132 | | |
127 | 133 | | |
128 | 134 | | |
| 135 | + | |
129 | 136 | | |
130 | 137 | | |
131 | 138 | | |
| |||
Lines changed: 59 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| 37 | + | |
36 | 38 | | |
37 | 39 | | |
38 | 40 | | |
Lines changed: 91 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
| |||
333 | 335 | | |
334 | 336 | | |
335 | 337 | | |
| 338 | + | |
336 | 339 | | |
337 | 340 | | |
338 | 341 | | |
| |||
367 | 370 | | |
368 | 371 | | |
369 | 372 | | |
| 373 | + | |
370 | 374 | | |
371 | 375 | | |
372 | 376 | | |
| |||
598 | 602 | | |
599 | 603 | | |
600 | 604 | | |
| 605 | + | |
601 | 606 | | |
602 | 607 | | |
603 | 608 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
65 | 66 | | |
66 | 67 | | |
67 | 68 | | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
68 | 72 | | |
69 | 73 | | |
70 | 74 | | |
| |||
0 commit comments