Files
rosenblatt/userspace
Markus Fritsche 2270f749bf Rosenblatt: arbitrary-size matmul on the NPU via tiling (U6 core primitive)
gemmtest.c computes Y[M][N]=X[M][K]*W[K][N] for M larger than one CBUF tile by
splitting M via rkt_gemm_plan and running each chunk as a verified single-op
matmul (fresh BOs/tile, weights packed once), assembling the output. M=4096
via 4x1024-row tiles -> output matches CPU exactly (0/32768 wrong).

Key HW limit found: a single rocket op writes correct output only up to
M~1024 rows (K=16); M=2048 silently drops rows past ~971 (CBUF input capacity),
so tile_m<=1024 is the safe per-op bound. Also: fresh BOs per tile are needed
(reusing in/out/reg BOs across jobs corrupted later tiles). This is the tiling
orchestration U6/ggml will use; N-tiling (weight-column) + weight-reuse
optimization are next.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 08:58:53 +02:00
..