OpenSolvers ported OpenBLAS to K3's wide A100 cores (VLEN=1024) and ran HPL. The result: stock ZVL256B kernels run 3.5x slower on A100 than X100, but custom ZVL1024B tiles recover 2.4x. Mixed 8+8 ranks hit 57.5 GFLOP/s.
The SpacemiT K3 is a heterogeneous RISC-V platform: eight X100 application cores (RVA23, RVV VLEN=256) paired with eight A100 AI cores (RVV VLEN=1024, IME2 matrix units). Both clusters speak RVV 1.0, but the A100s are four times wider. The obvious question — can you throw standard BLAS/HPL at the wide cores and go faster? — has a non-obvious answer.
Community member opensolvers spent time on the Banana Pi BPI-SM10 (SpacemiT K3) and published a detailed analysis on the SpacemiT forum. This article summarizes the findings, the pitfalls, and the path to useful performance.Before any benchmarking, there is a Linux scheduling quirk to know about. The A100 cores are visible in sysfs but fenced from normal affinity. To run code on them you need:
echo $$ > /proc/set_ai_thread taskset -c 8-15 ...There is also a dynamic-linker gotcha: do not start on X100, let OpenBLAS cache its VLEN=256 decisions, and then migrate to A100. That path can SIGSEGV. Register the AI thread before exec.
| Setup | OpenBLAS Target | GFLOP/s |
|---|---|---|
| X100 x8 | ZVL256B | ~52-53 |
| A100 x8 | ZVL256B (VLEN-safe) | 15 |
| A100 x8 | new ZVL1024B | 35.9 |
| 8 X100 + 8 A100 | ZVL256B + ZVL1024B | 57.5 |
The first row is the baseline: eight X100 cores with stock OpenBLAS targeting VLEN=256. The second row shows what happens when you run the same ZVL256B kernels on A100: 15 GFLOP/s, roughly 3.5x slower than X100. The wide VLEN alone is not a free speedup — in fact, with mismatched tile geometry, it is a slowdown.
The third row is the fix: a new OpenBLAS target RISCV64_ZVL1024B with DGEMM 16x8 tiles generated from OpenBLAS's generate_kernel.py. This recovers about 2.4x on A100, bringing the score to 35.9 GFLOP/s. That is still behind X100, but now the A100 cores are genuinely useful rather than a trap.The fourth row is the payoff: once A100 is not a straggler, an equal 8+8 mixed MPI run beats X100-only (57.5 vs ~53 GFLOP/s). With the slow BLAS on A100, equal ranks were a trap (~27 GF); the old optimum was "mostly X100, few A100 ranks."
Full L2/L3 OpenBLAS BLATs (S/D/C/Z) on A100 with the new target: all PASSED.Board provided by Banana Pi. IME2 / GPU numbers still to come — this was the plain-RVV story only.