2.1.0
clpeak 2.1.0
The GUI release: clpeak now ships a real app for macOS, Linux and Windows alongside the CLI, built from the same benchmark engine. This release also corrects several kernels that were understating hardware — some numbers will be higher than 2.0.19 on the same machine (see Measurement corrections).
Desktop, Android and iOS app
- New
clpeak-guiFlutter app for macOS, Linux and Windows, sharing one codebase with the Android and iOS apps and driving the C++ engine over a newclpeak_ffiC ABI (src/ffi). - Device detection, live-streaming results as they land, saved run history, and XML export. Custom… narrows a run to specific devices, categories and per-test time budgets.
- Monochrome instrument-console theme with Auto/Light/Dark, wrapping device and test names, persisted device properties and test display names so saved runs read correctly.
- Desktop run history moved to
$HOME/.clpeak. - The native Kotlin Android and Swift iOS apps are retired in favour of this one.
New tests
| Test | Flag | Measures |
|---|---|---|
| Apple Accelerate / BNNS GEMM | --accelerate |
sgemm/dgemm + BNNS fp16/bf16 through Apple's matrix coprocessor — ~1.8–2.5 TFLOPS sgemm on M1 Pro vs 760 GFLOPS for the NEON row |
| MPS attention | --mps-attention |
MPSGraph SDPA at a fixed llama-class fp16 shape (macOS 15 / iOS 18+) |
| Texture sample rate | --texture-sample |
Bilinear filtered-fetch throughput in GTexels/s (rgba8, rgba16f) |
| Store-to-load forwarding | --store-forward |
STLF latency cost probe in ns |
| SMT scaling | --smt-scaling |
fp32 throughput at one thread/physical core vs all logical threads (Linux/Windows) |
Measurement corrections
These change reported numbers, for the better:
- Compute MAD chains rebuilt as a single accumulator instead of a two-register ping-pong, across all six backends. The old shape halved fp32 throughput at 5–8 live chains on Apple GPUs (float8: 2402 → 5100+ GFLOPS on M1 Pro). The OpenCL int24 path was fixed along the way.
- OpenCL
mad()replaced with a contracted expression in the fp kernels. Apple's CL-on-Metal compiler never loweredmad()to hardware FMA: fp32 on M1 Pro goes 2.2 → 4.5 TFLOPS, now within 1–2% of Metal. - CPU cache-bandwidth loop shape fixed for read, write and copy — L1 read 112 → 153 GB/s — plus aligned bandwidth buffers and a clock-settle before multi-threaded timing.
- AVX-512 FP16 chain no longer collapses under fast-math, and every
cpu_simdwrapper is force-inlined (GCC was emitting real calls). - MPS GEMM is now sized by measurement, not
gpuCoreCount— fixes identical sizes on all iPhones/iPads and a 50 ms → 550 ms spread across Macs. - MPSGraph-based tests are gated off on simulators.
CLI
--describeprints what each test and each reading actually measures, inline under the results. Every test in every backend — CPU, Metal, Vulkan, OpenCL, CUDA, ROCm, oneAPI — is documented; the GUI shows the same text behind an info glyph.
Build and packaging
- Release archives now carry
clpeak-guialongside the CLI; macOS additionally ships a drag-to-Applications.dmg. GUI builds cover Linux x86_64, Windows x86_64 and macOS arm64, including the CUDA/ROCm/oneAPI variants. CLPEAK_ENABLE_GUI(defaultON, auto-skipped without a Flutter SDK);cmake --build build --target clpeak-gui.- Fixes
-fltodistro builds: per-ISA translation units are now excluded from LTO, which was dropping their-m/-marchflags at LTRANS time (Arch'stmmultf32ps is not supported on x86_64link failure) and could have inlined ISA-specific code into the baseline dispatcher. - Version is derived once at configure time from
git describe, and Flutter's generated-file churn no longer stamps releases-dirty. - Snap permission fix, Flatpak desktop entries, Linux window icon, and a new project page at krrishnarraj.github.io/clpeak.
Other fixes
- Overlapping
TestScopes no longer silently drop result rows from the text output. - docs and
AGENTS.mdtrimmed; refreshed reference results.
Full changelog: 2.0.19...2.1.0