Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions boards/RV2.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
The OrangePi RV2 uses the Ky X1 SoC with 8× SpacemiT X60 cores.
The Orange Pi RV2 is built on the SpaceMiT **K1** SoC: eight **SpacemiT X60** cores at ~1.6 GHz (`rv64gcv`, **RVV 1.0, VLEN=256**), 8 GB RAM.

![](rv2.png)

## HPL
## HPL via EESSI

See also the [cross-board HPL overview](hpl.html).

Unlike the scalar VisionFive 2, the X60 already dispatches OpenBLAS's upstream **RVV** `RISCV64_ZVL256B` kernels from the stock EESSI stack — but OpenBLAS **0.3.30** has a bug in `gemv_n` that zeroes an uninitialized vector register, so stock EESSI **HPL fails with residual `nan`** (it can still report a plausible ~8.5 GFLOP/s; only the residual check reveals the answer is wrong).

End-to-end on real Orange Pi RV2 hardware using [EESSI](https://www.eessi.io/) `2025.06-001` on [`dev.eessi.io/riscv`](https://www.eessi.io/docs/repositories/dev.eessi.io-riscv/). Peak run: **N=20000**, **NB=256**, **2×4** grid (8 MPI ranks).

| | Before | After |
| --- | ------ | ----- |
| HPL | DNF | **7.38 GFLOP/s** |
| HPL (8 cores, N=20000, 2×4) | ~8.5 GFLOP/s, **FAILED** (`nan`) | **10.53 GFLOP/s**, **PASSED** |
| Residual (N=8000, 1×8) | `nan` | 4.04e-03 |

**Before** — stock EESSI OpenBLAS 0.3.30 (RVV `gemv_n` bug). **After** — fixed OpenBLAS built with `TARGET=RISCV64_ZVL256B` and a backported `gemv_n` patch ([easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444)), swapped in via FlexiBLAS — no HPL rebuild.

The fix backports the upstream `gemv_n` correction from OpenBLAS ≥ 0.3.31 ([OpenBLAS#5408](https://github.com/OpenMathLib/OpenBLAS/pull/5408)). A future EESSI bump to OpenBLAS ≥ 0.3.34 should make the patch unnecessary.

### Reproducing the fixed run

1. Set up CVMFS + EESSI on `riscv64` (`EESSI_VERSION_OVERRIDE=2025.06-001`).
2. Baseline: `module load HPL/2.3-foss-2025b` → stock HPL fails residual check (`nan`).
3. Build fixed OpenBLAS: `eb --from-pr 26444 --robot` (via `EESSI-extend` user install, `EASYBUILD_OPTARCH='-march=rv64imafdcv_zvl256b'`).
4. Register the new backend with FlexiBLAS and re-run the same `xhpl`.

See the [cross-board HPL overview](hpl.html) for full comparison. **Before** (EESSI) DNF due to an RVV bug in OpenBLAS 0.3.30.
Full walkthrough: [EESSI/docs#819](https://github.com/EESSI/docs/pull/819) — *Chasing a NaN: correct RVV HPL on a RISC-V SpaceMiT X60 via EESSI*.
14 changes: 9 additions & 5 deletions boards/hpl.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
# HPL results overview

Cross-board summary of **High Performance Linpack (HPL)** runs on consumer RISC-V hardware, comparing `-march` targets and EESSI stack builds.
Cross-board summary of **High Performance Linpack (HPL)** runs on consumer RISC-V hardware through the EESSI stack.

**Toolchain:** GCC 14.3.0, OpenBLAS 0.3.30, HPL 2.3.0. EESSI runs use `2025.06-001` on [`dev.eessi.io/riscv`](https://www.eessi.io/docs/repositories/dev.eessi.io-riscv/).

| Board | Cores | Before | After |
| ----- | ----- | ------ | ----- |
| [StarFive VisionFive 2](VisionFive2.html) | 4× SiFive U74 | 3.13 GFLOP/s | **5.28 GFLOP/s** |
| [OrangePi RV2](RV2.html) | 8× SpacemiT X60 | DNF | 7.38 GFLOP/s |
| [BananaPi F3](F3.html) | 8× SpacemiT X60 | DNF | — |
| [Orange Pi RV2](RV2.html) | 8× SpacemiT X60 | FAILED (`nan`) | **10.53 GFLOP/s** |
| [Banana Pi F3](F3.html) | 8× SpacemiT X60 | FAILED (`nan`) | — |

**DNF** — did not finish on the EESSI RISC-V stack, due to an RVV bug in OpenBLAS 0.3.30.
**Before** — stock EESSI OpenBLAS 0.3.30 on each board.

The VisionFive 2 **After** result uses a SiFive U74 OpenBLAS micro-kernel built via EasyBuild, swapped in at runtime with FlexiBLAS — **1.69×** faster than the stock EESSI **Before** build on the same hardware. See the [VisionFive 2 page](VisionFive2.html) and [EESSI/docs#818](https://github.com/EESSI/docs/pull/818) for the full walkthrough.
**After** — board-specific fixed OpenBLAS via EasyBuild, swapped in at runtime with FlexiBLAS (no HPL rebuild).

On **VisionFive 2** (scalar U74), stock OpenBLAS uses a generic kernel; the fix adds a tuned U74 micro-kernel ([easyconfigs#26436](https://github.com/easybuilders/easybuild-easyconfigs/pull/26436), [EESSI/docs#818](https://github.com/EESSI/docs/pull/818)).

On **X60 boards** (RVV 1.0, VLEN=256), stock OpenBLAS already dispatches RVV kernels but **0.3.30's `gemv_n` produces NaN**, so HPL fails its residual check despite reporting plausible GFLOP/s. The fix backports the upstream `gemv_n` correction ([easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444), [OpenBLAS#5408](https://github.com/OpenMathLib/OpenBLAS/pull/5408), [EESSI/docs#819](https://github.com/EESSI/docs/pull/819)). Banana Pi F3 uses the same K1/X60 SoC — the same fix applies; peak result not yet recorded.