Skip to content

Commit 699db68

Browse files
Merge pull request #581 from bernardladenthin/todo/s390x-modular-cfarm191
docs: modular s390x jar verified on cfarm191, Android AAR run read
2 parents 08cd477 + 40af8a6 commit 699db68

2 files changed

Lines changed: 23 additions & 11 deletions

File tree

‎CLAUDE.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2597,7 +2597,10 @@ Q4_K_M converted to big-endian, `llama-bench -t 4 -p 64 -n 16`, two interleaved
25972597
generation) -- 4.5x and 4x over the scalar library every jar up to 6.0.x shipped. Correctness, by
25982598
`llama-perplexity --kl-divergence` against a Q8_0 reference computed on `z13`: the Q4_K_M model
25992599
lands at a mean KLD of 0.0777 on `z13` and 0.0746 on `z16` -- equally far from it; the 0.0087
2600-
between the two modules is about a tenth of what the quantization costs. **Under qemu** (the
2600+
between the two modules is about a tenth of what the quantization costs. The CI-built jar (run
2601+
40475405391) loads `libggml-cpu-z16.so` there and serves the same model through `ServerLauncher` at
2602+
29.9-35.6 t/s generation with 4 threads, against 9.9-10.0 for the static 6.1.0-SNAPSHOT jar before
2603+
it (TODO.md, "Linux s390x"). **Under qemu** (the
26012604
`c_abi` run of `build-linux-s390x`, the RHEL 8 row of `smoke-glibc-floor`) ggml loads `z15`:
26022605
qemu-user's CPU model has VXE2 and no NNPA, so CI runs the vector code too, in emulation (measured
26032606
locally with the job's toolchain: `c_abi` reports `CPU : VXE = 1`, and the library loads in the UBI 8

‎TODO.md‎

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -568,12 +568,20 @@ loads on RHEL 8.10 s390x (UBI 8 OpenJDK 21 runtime under qemu) where the 6.0.0 j
568568
upstream's list lacks. On cfarm191 (b11901, Qwen3-0.6B Q4_K_M big-endian, 4 threads): `z13`
569569
19.7 / 13.6 t/s, `z15` 90.0-95.5 / 57.3-58.3, `z16` 82.6-88.3 / 51.9-53.9 (prompt / generation).
570570
The C++ suite moved to `test-cpp-linux-s390x` (a modular build cannot link `jllama_test`).
571-
- [ ] **The CI-built modular s390x jar on cfarm191**, once a Publish run of the branch is green:
572-
`NativeLoadSmoke` and the `ServerLauncher` round on the big-endian Qwen3-0.6B as on 2026-10-26,
573-
plus which module the loader line and `JNI_OnLoad`'s registry log name (`z16` expected), and the
574-
speed against the 6.1.0-SNAPSHOT static jar of run 40400361809 (0.33 t/s generation at 8 threads
575-
on the shared host, 13.6 t/s for the scalar build at 4). Only a real IBM Z runs the vector modules
576-
at their own speed; qemu scores them against its CPU model.
571+
- [x] **The CI-built modular s390x jar on cfarm191** (2026-10-27, the `llama-glibc-floor` set of the
572+
green PR run 40475405391 of #580, JDK 25 on Debian 13, z16):
573+
- `NativeLoadSmoke`: linked b11901-5320c87ff, `compiler=Clang 18.1.3`, patches 0001-0023; all 9
574+
files extracted, and `JNI_OnLoad` logs `loaded CPU backend from .../libggml-cpu-z16.so`,
575+
`2 backend(s) registered ... [RPC, CPU]`.
576+
- `ServerLauncher` on the big-endian Qwen3-0.6B Q4_K_M answers "Paris." (fingerprint
577+
b11901-5320c87ff), the same text as the static jar of run 40400361809 at temperature 0.
578+
- **Speed against that static jar**, three alternating rounds on a quiet host (load < 1 before,
579+
26 prompt tokens, 64 generated, t/s): at 4 threads prompt 50.3-61.8 against 14.4-16.0 and
580+
generation 29.9-35.6 against 9.9-10.0 (3.0-3.6x); at 8 threads prompt 35.3-81.4 against
581+
13.8-25.2 and generation 24.1-49.5 against 14.8-15.4, noisy on the shared host. The 0.33 t/s of
582+
the earlier check was the host's load, not the jar.
583+
Only a real IBM Z runs the vector modules at their own speed; qemu scores them against its CPU
584+
model.
577585
- [ ] **z17 (`-march=arch15`)** is skipped: clang 18 rejects the flag (clang 19 on cfarm191 too), and
578586
ggml's configure drops the variant silently. Re-check when the toolchain's clang moves, and
579587
measure on a z17 if the farm gets one.
@@ -691,7 +699,8 @@ measurements and is not evidence that GPU testing is currently blocked.
691699
into 133 of the core's 146 class files (RUNTIME retention). So dropping the dependency needs
692700
`-dontwarn org.checkerframework.**` in `consumer-proguard.txt`, or a minified app fails R8 on
693701
"Missing class"; added, like lombok and animal-sniffer.
694-
- [ ] **Read the first Publish run:** `package-android-aar`'s new step, the consumer fixture's R8
695-
`assembleRelease` (cpu and opencl) now that checker-qual is off its classpath, and the
696-
emulator instrumentation test (Jackson reflecting over the annotated classes without
697-
checker-qual -- ART is expected to skip the unresolvable annotation types, as the JVM does).
702+
- [x] **Read the Publish run** (40475405391, #580, 2026-10-27): `verify-aar-poms.py` says both poms
703+
"mirror the core" (jackson-databind, jspecify, slf4j-api); the consumer fixture's
704+
`minifyReleaseWithR8` + `assembleRelease` pass for cpu and opencl without checker-qual; the
705+
emulator job's `connectedDebugAndroidTest` passes (Jackson over the annotated classes, ART
706+
skips the unresolvable annotation types as expected).

0 commit comments

Comments
 (0)