The benchmark campaign for tlinalg-rs:
results keyed by library commit × hardware profile, with the staleness of
every cell visible rather than implied. It is the same shape as
tprims-benchmark, which owns the
same job for tprims-rs.
| Latest results | result/INDEX.md — generated table of contents over the per-revision pages |
| Result layout | docs/results.md |
| Timing policy | docs/timing-policy.md |
| Reference revision | pins/tlinalg-rs.rev — what status is measured against |
| Design record | docs/worklog.md — decisions, fixed failures, open items |
The harness lives in tlinalg-rs (crates/tlinalg-bench, binary tlbench) and is
built out of the same checkout as the library it measures, into a target
directory keyed by that commit. A harness built from this repository could
silently measure a different revision of the library than the one it was written
against; building it in place makes the recorded commit describe both.
./scripts/setup_extern_deps.sh # clone tlinalg-rs at pins/tlinalg-rs.rev
./scripts/setup_extern_deps.sh /path/to/checkout # or symlink a local checkout
# record one cell: for one vendor arm, build, verify, measure, validate, publish, reindex.
# One binary links one vendor library, so an arm is a run of its own.
python3 scripts/record_run.py zen5-cpu tlinalg-kernels --vendor openblas
python3 scripts/record_run.py zen5-cpu tlinalg-kernels --vendor mklThe comparison is between the two providers of the interface — the faer-backed
tlinalg and the LAPACK/BLAS-backed tlinalg-blas — with the vendor library
named and its own thread budget set and read back, because a row labelled 1T is
only a single-thread measurement if the vendor library also ran on one thread.
OpenBLAS and Intel MKL are the two vendor arms; each is its own build and its own
run, because a single dynamic MKL and a static OpenBLAS cannot share a process,
and each page therefore carries its own faer rows and its own vendor identity.
BLIS is a later arm and needs its own linkage decision, since BLIS ships no LAPACK.
The seven scripts/*.py entry points are thin shims over
campaign-toolkit, the shared
package the campaigns now have in common. requirements.txt pins it by git
revision; benchmarks/campaign.yaml is this campaign's descriptor, naming the
measured project, the vendor arms and every other value the toolkit needs. The
schemas/ copies are gone: the toolkit supplies them.
For local development, install the toolkit from a checkout instead of from git:
pip install -e ../campaign-toolkitIt is not the library's per-PR suite. tlinalg-rs keeps its own Criterion rows
(crates/tlinalg-bench/benches/kernels.rs), its protocol scripts
(benchmarks/scripts/{pinned.sh,idle_cpus.py}) and its harness; this repository
owns the campaign: the declarations, the revision pin, the run manifests, the
index and the published reports.