Skip to content

s390x: 4x8 GEMM micro-kernel, measured on a real IBM z17; Go 1.27.2 - #38

Merged
tannevaled merged 1 commit into
mainfrom
simd/s390x-gemm
Oct 9, 2026
Merged

tannevaled merged 1 commit into
mainfrom
simd/s390x-gemm

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

s390x on real hardware (IBM z17)

The LinuxONE VM now answers at a new address (ssh linuxone). Verified in /proc/sysinfo: IBM z17 (Type 9175), a z/VM 7.3.0 guest with 8 vCPUs in a shared LPAR. v0.8.0's s390x kernels, until now validated under emulation only, now run there:

  • The whole suite passes, as do the fence tests (sumVX reading len+1 faults on 4 KiB pages) and TestParallelStress (27,752 calls).
  • New 4×8 GEMM micro-kernel gemmMicro4x8VX: 16 two-lane accumulators, the B row in one VLM, A replicated with VLREPG, fused with VFMADB. Sabotage caught on the z17: dropping tile row 3 gives MatMul m=50 k=70 n=90 [270]: 0 != -249.

Measured with hostload (0% busy, 0% steal) + benchstat, 8 interleaved runs each, p = 0.000 unless marked:

z17, time 1 core 8 cores
Sum −85…−87% −82…−87%
AddInto/MulInto −44…−61% −36…−60%
MatVec −44% −40%
Dot −11% ~
MatMul 1024² (this PR) 340 → 70 ms 43 → 10 ms
GEMM geomean (11 shapes) −74% −66%

Exp is untouched by any of this and serves as the control: ±0.3%.

Go floor 1.27.2

  • Floor raised. At 1.27.1, govulncheck lists stdlib vulns fixed in 1.27.2 (GO-2026-6604/6612/6613/6617…), none reachable. At 1.27.2 it reports none. go.mod, the generator go.mod, every CI lane and the README badge are updated.
  • Correction. SECURITY.md had said cmd/compile: loong64 spills a byte-sized inlined result with an 8-byte MOVD, clobbering adjacent stack slots golang/go#81000 (loong64 miscompile) was fixed in 1.27.2. That is wrong: the backport (#81147) is on the 1.27.3 milestone, and the upstream reproducer still fails with go1.27.2 on cfarm401 (real Loongson). The old entry is struck through and annotated; the floor goes to 1.27.3 when it ships.

Docs

  • perf.md s390x section: emulation-only → measured on the z17, with the table above.
  • README: s390x 4×8 in the GEMM list, the "emulation only" sentence removed, plus the playground badge and line requested by the go-fft coordinator. https://go-ndarray.github.io/playground/ returns 200.
  • Plan updated, and the SECURITY.md audit entry added.

Version: v0.9.0 (Go floor raise + new kernel).

🤖 Generated with Claude Code

…oor 1.27.2; playground links; correct the loong64 1.27.2 claim

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit d699b21 into main Oct 9, 2026
12 checks passed
@tannevaled
tannevaled deleted the simd/s390x-gemm branch October 9, 2026 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant