Files
OpenBLAS/kernel/riscv64
hmeiland 4999e881a5 U74 target: hand-scheduled scalar asm DGEMM micro-kernel
Adds a hand-written RV64GC scalar 4x4 DGEMM micro-kernel (kern_u74.S) and
wires it as the U74 DGEMMKERNEL via a hybrid dispatcher
(gemmkernel_4x4_u74.c): the fast path (bm,bn multiples of 4, even bk,
non-TRMM) runs the asm; all other shapes, odd bk, and the TRMM builds fall
back to the portable C 4x4 kernel.

The asm uses a 4x4 register tile (16 accumulators), full operand double-
buffering (P/Q ping-pong) with one-iteration lookahead, and load-before-FMA
issue ordering matched to the U74's dual-issue in-order front end.  Probes
show this reaches the FP-pipe peak (~16.5 cycles / 16 fmadd.d = 2.9 GF on
L1-resident data); the streaming plateau is memory-latency-bound, not the
schedule.

Measured on a VisionFive 2 (single-core, KC=256): micro-kernel 1.88 vs 1.54
GF (+22%), full blocked DGEMM 1.77 vs 1.48 GF (+20%); the advantage holds
under 4-core contention (+17%).  End-to-end HPL N=10000 (4 cores, Q=256):
5.17 vs 4.97 GF (+4.0%), residual PASSED.  Correctness validated against the
full BLAS Level-3 test suite (DGEMM 17,496 computational calls, 0 failures).
kern_u74.S is the readable source; the .c embeds it via top-level __asm__ so
it builds as a single OpenBLAS kernel object with no build-system changes.
2026-07-10 03:31:45 +02:00
..
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2025-09-13 11:35:49 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2021-06-07 22:49:39 +00:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2021-06-07 22:55:56 +00:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2024-03-13 11:40:14 +01:00
2024-03-12 15:48:55 +01:00
2023-03-19 23:59:03 -07:00
2020-10-15 16:09:02 +08:00
2025-11-04 22:27:53 +00:00
2023-03-19 23:59:03 -07:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2020-10-15 16:09:02 +08:00
2024-03-12 20:42:11 +01:00
2024-03-12 20:40:29 +01:00
2024-03-12 15:49:41 +01:00
2025-05-15 18:55:47 +08:00
2020-10-15 16:09:02 +08:00
2025-06-12 13:33:56 -07:00