Skip to the content.

BLAS (OpenBLAS)

OpenBLAS on consumer RISC-V boards via EESSI and FlexiBLAS (swap backends without rebuilding apps).

Harness: opensolvers/benchmarks/OpenBLAS. Related: BLIS, NumPy, HPL. Video: NaN Linpack on RISC-V · EESSI blog.

What broke / what we fixed

Board Stock problem Fix Headline
VisionFive 2 (U74) Generic 2×2 GEMM only 4×4 DGEMM asm (TARGET=U74) HPL 3.13 → 5.28 GFLOP/s (1.69×)
Orange Pi RV2 (X60 RVV) RVV gemv_n → NaN Backport gemv_n fix HPL FAILED → 10.53 GFLOP/s; DGEMM 2.3× vs scalar
Banana Pi F3 (same K1) Same gemv_n bug Same fix HPL 11.52 GFLOP/s; DGEMM 2.35×
BeagleV-Ahead (C910) Stock target uses Xuantie v0p7 march GCC 14 xtheadvector + th.* GEMM asm DGEMM 7.42 / SGEMM 16.58 GFLOP/s (4 cores). Real/double gemm/symm/syrk fail small CBLAS shapes

Fault is in dgemv only — plain dgemm can look fine on a broken build, which is why HPL / QE / PETSc fail while a GEMM microbench passes.

OpenBLAS 0.3.34 (RV2)

Upstream v0.3.34 (TARGET=RISCV64_ZVL256B) has a working RVV path on X60 — verified with run-034-tests.sh:

Check Result
dgemv NaN 0 (stock 0.3.30: 768)
SYRK PSD / CTRSM PASS / 2400/0
DGEMM N=2048×8 thr 15.54 GFLOP/s (~1.6× stock 0.3.30)
HPL N=8000 / N=20000 11.04 / 10.97 GFLOP/s PASSED

EESSI still ships 0.3.29/0.3.30; use a local 0.3.34 + FlexiBLAS until the stack bumps.

Packages

Target EasyBuild Upstream
U74 easyconfigs#26436 OpenBLAS#5903
X60 easyconfigs#26444 OpenBLAS#5408, #5476

eb --from-pr <num> --robot into EESSI-extend, then flexiblas add / flexiblas default.

Reproduce

gcc -O2 bench_dgemm.c -o bench_dgemm -lflexiblas
gcc -O2 difftest.c -o difftest -ldl -lm
OPENBLAS_NUM_THREADS=8 ./bench_dgemm 4096
./difftest /path/to/libopenblas.so
Tool Role
bench_dgemm Square GEMM GFLOP/s + C[0]
difftest Level-1/2/3 sums + NaN counts
verify_ctrsm TRSM parameter sweep (VLEN bugs)