Skip to content

Commit 4fb6a1a

Browse files
Add Banana Pi F3 benchmark results from opensolvers/benchmarks.
Cross-board confirmation for HPL, BLAS, LAPACK, and ELPA on the BPI-F3 (3.7 GB RAM limits larger HPL configs). Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 037c517 commit 4fb6a1a

7 files changed

Lines changed: 63 additions & 11 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ End-to-end application benchmarks on the same boards and EESSI toolchain:
2424

2525
- **[StarFive VisionFive 2](boards/VisionFive2.html)** — JH7110 SoC, 4× SiFive U74 (`rv64gc`). U74 OpenBLAS tuning: HPL **3.13 → 5.28 GFLOP/s**.
2626
- **[Orange Pi RV2](boards/RV2.html)** — SpaceMiT K1, 8× X60 (RVV). Fixed OpenBLAS: HPL **FAILED (`nan`) → 10.53 GFLOP/s**; ELPA **34.81 s** (vs 54.92 s scalar).
27-
- **[Banana Pi F3](boards/F3.html)** — same K1 / X60 SoC; same fixes apply, peak results not yet recorded.
27+
- **[Banana Pi F3](boards/F3.html)** — same K1 / X60 SoC, **3.7 GB RAM**. HPL **FAILED (`nan`) → 11.52 GFLOP/s**; NumPy DGEMM up to **17.51 GFLOP/s** on patched RVV.
2828

2929
Use the menu above to jump to a board, app, or scientific lib page.

apps/hpl.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Cross-board summary of **High Performance Linpack (HPL)** on consumer RISC-V har
1010
| ----- | ----- | ------ | ----- |
1111
| [VisionFive 2](../boards/VisionFive2.html) | 4× SiFive U74 | 3.13 GFLOP/s | **5.28 GFLOP/s** |
1212
| [Orange Pi RV2](../boards/RV2.html) | 8× SpacemiT X60 | FAILED (`nan`) | **10.53 GFLOP/s** |
13-
| [Banana Pi F3](../boards/F3.html) | 8× SpacemiT X60 | FAILED (`nan`) | |
13+
| [Banana Pi F3](../boards/F3.html) | 8× SpacemiT X60 | FAILED (`nan`) | **11.52 GFLOP/s** |
1414

1515
**Before** — stock EESSI OpenBLAS 0.3.30 (same `xhpl` binary throughout).
1616

@@ -47,4 +47,12 @@ Scalar U74 — stock OpenBLAS uses a generic kernel; the U74-tuned build lifts H
4747

4848
## Banana Pi F3
4949

50-
Same K1 / X60 SoC as the Orange Pi RV2 — same stock failure and same [easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444) fix applies. Peak HPL not yet recorded.
50+
Same K1 / X60 SoC as the Orange Pi RV2 — cross-board confirmation on [opensolvers/benchmarks](https://github.com/opensolvers/benchmarks). **3.7 GB RAM** limits problem size: only `HPL.dat` (N=8000) was run; larger configs need more memory than this board has.
51+
52+
| Backend | GFLOP/s | Residual | Result |
53+
| ------- | ------- | -------- | ------ |
54+
| Stock EESSI RVV | 11.64 | `nan` | FAILED |
55+
| Scalar | 6.52 | 4.63e-03 | PASSED |
56+
| Patched RVV | **11.52** | 4.04e-03 | PASSED |
57+
58+
**1.77×** scalar → patched vector; residual bit-identical to RV2.

boards/F3.md

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,31 @@
1-
The BananaPi F3 uses the SpacemiT K1 SoC with 8× SpacemiT X60 cores.
1+
The Banana Pi BPI-F3 is built on the SpaceMiT **K1** SoC: eight **SpacemiT X60** cores at 1.6 GHz (`rv64gcv`, **RVV 1.0, VLEN=256**), **3.7 GB RAM** — same chip as the [Orange Pi RV2](RV2.html), but half the memory.
22

33
![](f3.jpg)
44

5+
Cross-board confirmation from [opensolvers/benchmarks](https://github.com/opensolvers/benchmarks): same `gemv_n` bug, same [easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444) fix, bit-identical residuals where measured.
6+
57
## HPL
68

7-
| | Before | After |
8-
| --- | ------ | ----- |
9-
| HPL | DNF ||
9+
See also the [HPL app overview](../apps/hpl.html).
10+
11+
`HPL.dat` (N=8000, 1×8), EESSI `2025.06-001`. Larger configs (`HPL_big.dat`, `HPL-sweep.dat`) were **skipped** — they need 6.6 GB / 3.2 GB and exceed this board's 3.7 GB RAM.
12+
13+
| Backend | GFLOP/s | Residual | Result |
14+
| ------- | ------- | -------- | ------ |
15+
| Stock EESSI RVV (unpatched) | 11.64 | `nan` | **FAILED** |
16+
| Scalar (`RISCV64_GENERIC`) | 6.52 | 4.63e-03 | PASSED |
17+
| Patched RVV (`gemv_n` fix) | **11.52** | 4.04e-03 | **PASSED** |
18+
19+
**1.77×** scalar → patched vector; patched residual is bit-identical to the RV2.
20+
21+
## Other probes (patched RVV vs scalar)
22+
23+
| Probe | Scalar | Patched RVV | Speedup |
24+
| ----- | ------ | ----------- | ------- |
25+
| `bench_dgemm` N=2048, 1 core | 1.26 GFLOP/s | 2.96 GFLOP/s | 2.35× |
26+
| `bench_dgemm` N=4096, 8 threads || 17.71 GFLOP/s ||
27+
| NumPy DGEMM N=4096 | 4.91 GFLOP/s | **17.51 GFLOP/s** | **3.6×** |
28+
| NumPy `eigvalsh` N=2048 | 9.59 s | 5.94 s | 1.6× |
29+
| ELPA `na=3000` | 50.42 s | **34.83 s** | 1.45× |
1030

11-
Benchmarking in progress. **Before** (EESSI) DNF due to an RVV bug in OpenBLAS 0.3.30. See the [HPL app overview](../apps/hpl.html).
31+
Stock unpatched RVV: HPL and ELPA fail (`nan`); NumPy `eigvalsh` raises `LinAlgError: Eigenvalues did not converge`.

scientific-libs/blas.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Improvements to **OpenBLAS 0.3.30** on RISC-V boards — built via EasyBuild, de
1010
| ----------- | ---------------------- | --- | ------ |
1111
| [VisionFive 2](../boards/VisionFive2.html) — SiFive **U74** (scalar) | No U74 kernel; falls back to generic `RISCV64_GENERIC` C `2×2` GEMM | New **4×4 DGEMM micro-kernel** in RV64 assembly, `TARGET=U74` | Single-core DGEMM **~1.4 → 1.77 GFLOP/s**; 4-core DGEMM **6.31 GFLOP/s**; [HPL **1.69×**](../apps/hpl.html) |
1212
| [Orange Pi RV2](../boards/RV2.html) — SpacemiT **X60** (RVV VLEN=256) | RVV `gemv_n` zeroes an **uninitialized** vector register → `dgemv` returns NaN | Backport upstream `gemv_n` fix; `TARGET=RISCV64_ZVL256B` | Correct `dgemv`; see [HPL](../apps/hpl.html) and A/B tables below |
13-
| [Banana Pi F3](../boards/F3.html) — same K1 / X60 SoC | Same RVV `gemv_n` bug as RV2 | Same [easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444) fix | Fix applies; peak results not yet recorded |
13+
| [Banana Pi F3](../boards/F3.html) — same K1 / X60 SoC | Same RVV `gemv_n` bug as RV2 | Same [easyconfigs#26444](https://github.com/easybuilders/easybuild-easyconfigs/pull/26444) fix | HPL **11.52 GFLOP/s** PASSED; `difftest` bit-identical to RV2; threaded DGEMM **17.71 GFLOP/s** |
1414

1515
## X60 A/B — patched RVV vs scalar (Orange Pi RV2)
1616

@@ -34,6 +34,10 @@ The [benchmarks `difftest`](https://github.com/opensolvers/benchmarks/blob/main/
3434

3535
`dgemm` looks fine on the broken build — which is why a raw GEMM benchmark can pass while [HPL](../apps/hpl.html) and [ELPA](elpa.html) fail.
3636

37+
### Banana Pi BPI-F3 (cross-board confirmation)
38+
39+
Bit-identical `difftest` to RV2. `bench_dgemm` (1 core, N=2048): **1.26 → 2.96 GFLOP/s** (2.35×). Threaded (8 cores, N=4096): **17.71 GFLOP/s**.
40+
3741
## Packages
3842

3943
| Target | EasyBuild PR | Upstream OpenBLAS | Walkthrough |

scientific-libs/elpa.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,14 @@ The stock vector backend is faster than scalar but **wrong** — the same OpenBL
1818

1919
Speedup is smaller than pure `dgemm` (~2.3×) because tridiagonalization is latency-bound BLAS-2 — by design.
2020

21-
See also the [BLAS overview](blas.html) and [LAPACK](lapack.html) NumPy probe.
21+
### Banana Pi BPI-F3 (cross-board confirmation)
22+
23+
`na=3000`, 8 threads — same three backends as RV2:
24+
25+
| Backend | Time | Correctness |
26+
| ------- | ---- | ----------- |
27+
| Stock EESSI RVV | 37.93 s | **`ev0=nan` — FAIL** |
28+
| Scalar | 50.42 s | finite=1 |
29+
| Patched RVV | **34.83 s** | finite=1 (bit-identical to scalar) |
30+
31+
**1.45×** faster than scalar with the fix in place.

scientific-libs/lapack.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,13 @@ Backends swapped via FlexiBLAS on a NumPy linked against the FlexiBLAS hub (`Sci
1515

1616
Both patched runs are **finite** (correct through real LAPACK). The eigensolver speedup is lower than DGEMM because `eigvalsh` mixes BLAS-3 with BLAS-2 tridiagonalization — the same pattern seen in [ELPA](elpa.html).
1717

18-
Stock EESSI default RVV would return NaN on the eigensolver path; see the [BLAS `difftest` table](blas.html) for how the fault isolates to `dgemv`.
18+
Stock EESSI default RVV would return NaN on the eigensolver path; see the [BLAS `difftest` table](blas.html).
19+
20+
### Banana Pi BPI-F3 (cross-board confirmation)
21+
22+
| Kernel | Scalar | Patched RVV | Speedup |
23+
| ------ | ------ | ----------- | ------- |
24+
| DGEMM N=4096 | 4.91 GFLOP/s | **17.51 GFLOP/s** | **3.6×** |
25+
| EIGH N=2048 | 9.59 s | 5.94 s | **1.6×** |
26+
27+
Stock unpatched RVV: `eigvalsh` aborts with `LinAlgError: Eigenvalues did not converge` (DGEMM alone stays finite at 10.94 GFLOP/s).

website.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Nav config: `_config.yml` (`navigation`, `navigation_boards`, `navigation_apps`,
4444

4545
| Date | Decision |
4646
|------|----------|
47+
| 2026-07-14 | BPI-F3 results from `opensolvers/benchmarks`: HPL 11.52 GFLOP/s, 3.7 GB RAM limit |
4748
| 2026-07-12 | Homepage scope widened: scientific libs + apps, not HPL-only |
4849
| 2026-07-12 | Add `website.md`; sync HPL/BLAS from `opensolvers/benchmarks`; add scientific libs LAPACK + ELPA |
4950
| 2026-07-12 | Split nav: Boards / Apps / Scientific libs; move HPL to `apps/` |

0 commit comments

Comments
 (0)