From 201a8dc87ed07125d0791fcf5a84fe09ac14e08b Mon Sep 17 00:00:00 2001 From: tannevaled Date: Thu, 8 Oct 2026 13:52:08 +0200 Subject: [PATCH] =?UTF-8?q?landing:=20library=20=C2=B7=20v0.7.1;=20RVV=206?= =?UTF-8?q?x8=20GEMM;=20fix=20the=20SIMD=20card=20that=20put=20riscv64=20a?= =?UTF-8?q?mong=20the=20pure-Go=20targets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- hugo.toml | 4 ++-- layouts/index.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hugo.toml b/hugo.toml index d1d9040..87ea4b1 100644 --- a/hugo.toml +++ b/hugo.toml @@ -16,9 +16,9 @@ disableKinds = ['taxonomy', 'term', 'rss', 'sitemap', '404'] [[params.repos]] name = "ndarray" - kind = "library · v0.7.0" + kind = "library · v0.7.1" href = "https://github.com/go-ndarray/ndarray" - blurb = "The library. Creation (Zeros/Arange/Linspace/…), strided views, broadcasting elementwise + ufuncs, reductions (Sum/Max/ArgMax/CumSum/Clip/Where), manipulation (Reshape/Concatenate/Stack), linalg (MatMul/Dot) via a panel-packed cache-blocked GEMM with a go-asmgen SIMD-FMA micro-kernel (NEON 4×8 on arm64, AVX2/FMA 6×8 on amd64, VSX 8×8 on ppc64le, LASX 8×8 on loong64), and a Workspace arena for loops (Use/Reset/Detach)." + blurb = "The library. Creation (Zeros/Arange/Linspace/…), strided views, broadcasting elementwise + ufuncs, reductions (Sum/Max/ArgMax/CumSum/Clip/Where), manipulation (Reshape/Concatenate/Stack), linalg (MatMul/Dot) via a panel-packed cache-blocked GEMM with a go-asmgen SIMD-FMA micro-kernel (NEON 4×8 on arm64, AVX2/FMA 6×8 on amd64, VSX 8×8 on ppc64le, LASX 8×8 on loong64, RVV 6×8 on riscv64), and a Workspace arena for loops (Use/Reset/Detach)." [[params.repos]] name = "docs" kind = "site" diff --git a/layouts/index.html b/layouts/index.html index 53ae3c9..21a33f5 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -85,7 +85,7 @@

The n-dimensional array, without cgo.

✅

100% test coverage

Gated in CI, differentially checked against numpy.

🔢

NumPy semantics

Row-major strided arrays, NumPy broadcasting, and NumPy basic-indexing Slice returning strided views that share data.

♻️

Workspace arena for loops

Bind the inputs with ws.Use, compute as usual, ws.Reset() at the end of each pass: results stop costing the garbage collector anything. On a Zen 3, x + y on 1 024 elements drops from 2.6 to 0.38 µs (2.1× NumPy).

-
⚡

SIMD on amd64, arm64, ppc64le, loong64 & riscv64

go-asmgen SIMD kernels on amd64 (SSE2, AVX2/FMA picked at run time), arm64 (NEON), ppc64le (VSX) and loong64 (LASX, when the CPU has it) and riscv64 (RVV, when the CPU has it); riscv64, s390x and the 32-bit targets run the same pure-Go code those kernels are tested against.

+
⚡

SIMD on amd64, arm64, ppc64le, loong64 & riscv64

go-asmgen SIMD kernels on amd64 (SSE2, AVX2/FMA picked at run time), arm64 (NEON), ppc64le (VSX) and loong64 (LASX, when the CPU has it) and riscv64 (RVV, when the CPU has it); s390x and the 32-bit targets run the same pure-Go code those kernels are tested against.

🎯

Accurate Exp/Log

Ports of Arm's optimized-routines: worst 0.504 / 0.508 ULP against a 300-bit reference, and correct where Go's amd64 math.Exp returns +Inf (golang/go#81995) and math.Log is wrong on subnormals (golang/go#56600).

🧪

Multi-arch CI

The suite runs on amd64, arm64 and 386 natively and on riscv64/loong64/ppc64le/s390x/arm under qemu, on Linux, macOS and Windows, and compiles for every GOOS/GOARCH pair Go supports; v0.2.0 was also run on real amd64, arm64, ppc64le, riscv64 and loong64 hardware.

💎

The cgo-free ndarray that was missing

Ruby has no cgo-free ndarray (Numo::NArray and NMatrix are C extensions) and gonum's optimized assembly is amd64-only. go-ndarray pairs a portable pure-Go core with multicore fan-out and SIMD kernels.