Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
96a69c9
Implement genuine polycc-backed Pluto timing
guanLeTea Aug 2, 2026
54fe311
Index every skill, inline the manuals only when asked
ThrudPrimrose Aug 3, 2026
1389108
Qualify the pointers that exist, and gate the ones that arrive
ThrudPrimrose Aug 3, 2026
0619ec4
Port 39 KernelBench level3 networks to NumPy
ThrudPrimrose Aug 3, 2026
51e3a4d
Thirteen skill pages, five of them field-tested into shape
ThrudPrimrose Aug 3, 2026
d991f42
Answer the region-counter design's ten open questions, and settle the…
ThrudPrimrose Aug 3, 2026
bd800bd
Measure the GPU counter bracket, and find it was measuring nothing
ThrudPrimrose Aug 3, 2026
9a62564
Combine every job's coverage, not whichever one won the race
ThrudPrimrose Aug 3, 2026
ac03fc1
ncu flushes the caches, and a cache-resident kernel reads as DRAM-bound
ThrudPrimrose Aug 3, 2026
9f9ce96
Qualify lavamd's pointers, and say where each OpenMP directive came from
ThrudPrimrose Aug 3, 2026
37b10a8
Stop paying for coverage on the tree the report throws away
ThrudPrimrose Aug 3, 2026
8672d05
Teach the resolver where level3 lives, and fit the wide MLP under the…
ThrudPrimrose Aug 3, 2026
ecdafc6
Pin the kernelbench corpus size once instead of in four places
ThrudPrimrose Aug 3, 2026
469b444
Record what sysmon actually cost, since assuming was the whole trap
ThrudPrimrose Aug 3, 2026
9f445ea
Classify every manual-sized page, instead of remembering to
ThrudPrimrose Aug 3, 2026
6efe766
Fold a structural slice step the same way an axis is already folded
ThrudPrimrose Aug 3, 2026
25fc5d0
Install ninja, so the build cache that reports enabled is actually en…
ThrudPrimrose Aug 3, 2026
8327495
Build the sandbox in RAM where the RAM is not what is being measured
ThrudPrimrose Aug 3, 2026
7079950
Make the pluto column compile what polycc emitted
ThrudPrimrose Aug 3, 2026
8e85a74
Repair the five skill pages, and stop trusting a summariser for a for…
ThrudPrimrose Aug 3, 2026
e789a19
Run rocprofv3 on real AMD hardware, and correct what documentation go…
ThrudPrimrose Aug 3, 2026
c66bbcb
Backlog the AMD profiler install sample, with what it actually costs
ThrudPrimrose Aug 3, 2026
ec32173
skills(rocprofv3): --pmc aborts on gfx1103, record it as measured
ThrudPrimrose Aug 3, 2026
50f335c
skills(amd): validate documented flags against the installed tools
ThrudPrimrose Aug 3, 2026
75bb18d
Make the pluto column read the binding the emitter actually writes
ThrudPrimrose Aug 3, 2026
1dd1bad
Read the LDS column rocprofv3 actually emits, and the registers it al…
ThrudPrimrose Aug 3, 2026
e177075
Correct four AMD skill-page claims, one of them measured on hardware
ThrudPrimrose Aug 3, 2026
e5f857e
Stop the CI environment from overriding the build cache it asks for
ThrudPrimrose Aug 3, 2026
68a6d32
Match the portability gate to the OpenMP spelling pluto deliberately …
ThrudPrimrose Aug 3, 2026
075dbef
Stop three CI gates from passing on their own prose or on tee's exit …
ThrudPrimrose Aug 3, 2026
d640516
Make a framework sweep that failed everything exit non-zero
ThrudPrimrose Aug 3, 2026
cc9972d
Apply the sandbox headroom rule to the directory an operator names
ThrudPrimrose Aug 3, 2026
8b8c32c
Refuse to fold a rebound name into an axis, not just into a slice step
ThrudPrimrose Aug 3, 2026
8cccd36
Close the PAPI wall-clock bracket symmetrically, and stop blaming the…
ThrudPrimrose Aug 3, 2026
becdcd9
Close three one-directional guards
ThrudPrimrose Aug 3, 2026
d151e2a
Grade an escape-time kernel on the observable that is not chaotic
ThrudPrimrose Aug 3, 2026
343d8b1
Say plainly that the chaotic band only ever replaces fp64's
ThrudPrimrose Aug 3, 2026
e1a2242
Finish the KernelBench port: all 50 level3 networks, corpus at 250
ThrudPrimrose Aug 4, 2026
1865f20
Fortran emit: contained helpers for the operand-duplicating forms
ThrudPrimrose Aug 4, 2026
6913bba
docs: state the return and helper rules, and why the int width splits
ThrudPrimrose Aug 4, 2026
dcea151
Speed-up chart: signed change, banded by order of magnitude (backlog 7)
ThrudPrimrose Aug 4, 2026
ee460c4
docs: file the three CI reds on main, which have three different causes
ThrudPrimrose Aug 4, 2026
25138c4
Resolve tuple unpacks of an inlined local's .shape
ThrudPrimrose Aug 4, 2026
cdb1d11
Fortran: rename int_locals with every other side-table
ThrudPrimrose Aug 4, 2026
ad3086c
docs: a fourth CI red, and it is a dead upstream URL
ThrudPrimrose Aug 4, 2026
61cc19f
Refuse to scalarise a matmul instead of dropping the contraction
ThrudPrimrose Aug 4, 2026
498df34
Fold shape expressions instead of nesting one layer per inlined helper
ThrudPrimrose Aug 4, 2026
bd49ffb
Give swapaxes / expand_dims / squeeze an output shape so they hoist
ThrudPrimrose Aug 4, 2026
fd3c155
Mini speed-up chart: prune the ticks that do not survive embed size
ThrudPrimrose Aug 4, 2026
7cb0e28
Emitted C/C++: state the size_t conversion instead of letting it happen
ThrudPrimrose Aug 4, 2026
7c6789d
Compile C at c23
ThrudPrimrose Aug 4, 2026
89fe7cb
Type-hint the conversion gate and drop its underscore-prefixed helpers
ThrudPrimrose Aug 4, 2026
6396e3a
wip: isopar
ThrudPrimrose Aug 4, 2026
9e4c79d
One pointer-passing order in the ABI: helpers join Sec. 4
ThrudPrimrose Aug 4, 2026
1ba2dd1
expand_dims/squeeze: merge the newaxis rewrite into one subscript
ThrudPrimrose Aug 4, 2026
028e3dd
Ship the four language skills, named for the language they serve
ThrudPrimrose Aug 4, 2026
1f8f9df
Fold the shape table's own .shape reads, so a squeeze can see its uni…
ThrudPrimrose Aug 4, 2026
67e09fb
ABI doc: name the two helper shapes the one pointer rule does not reach
ThrudPrimrose Aug 4, 2026
d596c5b
Compile C++ at c++23
ThrudPrimrose Aug 4, 2026
d68e9a0
docs: HPTT is not gone, it is throttled -- and the cumsum red is reso…
ThrudPrimrose Aug 4, 2026
18054fb
translators: dispatch a runtime axis instead of refusing it
ThrudPrimrose Aug 4, 2026
d37f350
emit: scope a branch-local buffer's malloc and free to its branch
ThrudPrimrose Aug 4, 2026
62df1e2
Route the language page by the task's language, not by a profiling knob
ThrudPrimrose Aug 4, 2026
2d3b0f1
isopar: par_unseq everywhere except the scan, which libstdc++ gets wrong
ThrudPrimrose Aug 4, 2026
1fc5bce
Back to c17: the runner's mpicc does not know -std=c23
ThrudPrimrose Aug 4, 2026
3a634e8
Bind each language page to the standard the harness builds with
ThrudPrimrose Aug 4, 2026
a56b7d7
Emitted code computes at numpy's precision: mixed float/int divide, f…
ThrudPrimrose Aug 4, 2026
3f9cd3a
CI: stop discarding a run's findings when main is pushed again
ThrudPrimrose Aug 4, 2026
a479637
Helpers the canonical order cannot describe keep declaration order
ThrudPrimrose Aug 4, 2026
b16f4eb
An ABI argument is never also a baked-in constant
ThrudPrimrose Aug 4, 2026
a09515b
Merge: numpy numeric semantics (NEP 50 divide, fp32 accumulators)
ThrudPrimrose Aug 4, 2026
b9e29e1
Merge: fold the shape table's own .shape reads
ThrudPrimrose Aug 4, 2026
09a7da9
Merge: expand_dims/squeeze single-subscript rewrite
ThrudPrimrose Aug 4, 2026
64a4544
Merge: isopar par_unseq + libstdc++ parallel-scan workaround
ThrudPrimrose Aug 4, 2026
d9574f1
Merge: an ABI argument is never also a baked-in constant (runtime axi…
ThrudPrimrose Aug 4, 2026
ea59881
Report what a ratchet caught, not just that it caught something
ThrudPrimrose Aug 4, 2026
79a8e6e
Build the emitter under test through __init__, not __new__
ThrudPrimrose Aug 5, 2026
2918057
Spill a nested np.full so np.triu can see a name
ThrudPrimrose Aug 5, 2026
1f78046
Backlog: what the merge landing left open, with the evidence
ThrudPrimrose Aug 5, 2026
5867cdd
Assert PIC as a property of the flags every shared-library build runs…
ThrudPrimrose Aug 5, 2026
fcdefff
Give cuda and hip their own skill pages instead of routing both at la…
ThrudPrimrose Aug 5, 2026
6c33e79
Backlog: record the GPU-page landing and what it does not yet prove
ThrudPrimrose Aug 5, 2026
559456f
Resolve a buffer's dtype where it is stored, and refuse a token that …
ThrudPrimrose Aug 5, 2026
0c7bc5a
Split the integration tests and the HF export out of the unit job
ThrudPrimrose Aug 5, 2026
9a559e8
Backlog: close items A and B with the gates that settled them
ThrudPrimrose Aug 5, 2026
6556fda
Integrate PR #13 onto a main that had rebuilt the same column underne…
ThrudPrimrose Aug 5, 2026
ee69cee
Draw each cell's run-to-run spread as a box, and a compact banded layout
ThrudPrimrose Aug 5, 2026
dfffeb3
Add a square embed figure: four boxes, no titles, sized to read small
ThrudPrimrose Aug 5, 2026
0e15998
Add --bare, stripping the simple figure to boxes, zero line and three…
ThrudPrimrose Aug 5, 2026
4851bd4
Group both agents on the square figure's one axis, and name what it s…
ThrudPrimrose Aug 5, 2026
ca73a15
Lowercase the square figure's label, name its kernels, and tick the a…
ThrudPrimrose Aug 5, 2026
00c6903
Match the square figure to the violin panel it sits beside
ThrudPrimrose Aug 5, 2026
ec95d06
Weight the square figure for the size it is actually placed at
ThrudPrimrose Aug 5, 2026
bbaf3b6
Fix what the GPU skill pages got wrong about the toolchains they desc…
ThrudPrimrose Aug 5, 2026
fe75a74
Give the HIP clang-tidy gate the flag that lets it run on a packaged …
ThrudPrimrose Aug 5, 2026
0233838
Merge the genuine polycc-backed Pluto column onto main
ThrudPrimrose Aug 5, 2026
a89f687
Lower every corpus kernel's matmul, and sum large floats in blocks
ThrudPrimrose Aug 5, 2026
4304636
Pin and retry the HPTT clone so a throttled fetch is not a broken image
ThrudPrimrose Aug 5, 2026
c9a5aa8
Measure whether <execution> really runs in parallel, instead of assum…
ThrudPrimrose Aug 5, 2026
4026006
Run the determinism gate the GPU pages promise, and stop it failing o…
ThrudPrimrose Aug 5, 2026
ede81fb
Build CI on LLVM 21, and verify the driver the warnings ratchet needs
ThrudPrimrose Aug 5, 2026
8a86687
Record what C, D, E, F, G, I and J actually turned out to be
ThrudPrimrose Aug 5, 2026
9b53130
Record what the DaCe frontend refuses, and that both GPU lanes pass o…
ThrudPrimrose Aug 5, 2026
4f5bdd7
Prune the backlog docs to what is still open
ThrudPrimrose Aug 5, 2026
335d037
docs: drop the BACKLOG markdown from the repo
ThrudPrimrose Aug 5, 2026
81174cc
Verify fftw3 in the toolchain gate, so a missing header cannot skip c…
ThrudPrimrose Aug 5, 2026
a23907e
Rename the three tracks: scientific_computing, loop_level_reasoning, …
ThrudPrimrose Aug 5, 2026
70dcb00
Repair every skill page against its upstream source, not against sear…
ThrudPrimrose Aug 5, 2026
43540f0
A child's own fatal signal beats the timeout it raced
ThrudPrimrose Aug 6, 2026
4526727
One diagnostic route, and a submission the judge can actually reach
ThrudPrimrose Aug 6, 2026
b74777a
Repoint every page and doc at the consolidated judge API
ThrudPrimrose Aug 6, 2026
7a83f91
Desugar two constructs the DaCe frontend cannot take
ThrudPrimrose Aug 6, 2026
66f7f6c
Gate the DaCe frontend against the corpus it is generated for
ThrudPrimrose Aug 6, 2026
839126a
Check the shared-folder path at the HTTP boundary, not in the sandbox
ThrudPrimrose Aug 6, 2026
8efae9c
Compare every ML port against the PyTorch model it came from
ThrudPrimrose Aug 6, 2026
53aca80
Free a helper's heap locals on every return, not just the last one
ThrudPrimrose Aug 6, 2026
5db6250
Refuse a port whose model only builds at upstream scale
ThrudPrimrose Aug 6, 2026
cc21e91
Never free a buffer on the way out of returning it
ThrudPrimrose Aug 6, 2026
9aebe57
Free a deferred allocation before every one of its allocations
ThrudPrimrose Aug 6, 2026
efc0a56
Read a length-1 slice at its start, not at the loop variable
ThrudPrimrose Aug 6, 2026
46f74c3
Split a tuple assignment before the shape passes read it
ThrudPrimrose Aug 6, 2026
3d22c1e
Give every rank its own build folder and header cache
ThrudPrimrose Aug 6, 2026
4c2860d
Resolve every shape read to a symbol, and promote what can be promoted
ThrudPrimrose Aug 6, 2026
8391e02
Merge main into cluster work
LorenzoPaleari Aug 6, 2026
136c6d8
Add Beverin inference and cluster launch example
LorenzoPaleari Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
81 changes: 65 additions & 16 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,63 @@ runs:
- name: Native toolchain + OpenBLAS + FFTW
shell: bash
run: |
# build-essential: make + gcc + g++ (C/C++ backends). gfortran/clang: Fortran backend
# + judge. flang: the LLVM Fortran backend (tests/test_compile_flags.py's flang case).
# libomp-dev: the SECOND OpenMP runtime. tests/test_fork_openmp_safety.py asserts on it
# rather than skipping -- libgomp deadlocks across fork() and libomp recovers, so a
# suite that only ever sees libgomp cannot tell the fix from the forgiving runtime.
# It is a METAPACKAGE (same shape as flang): it pulls libomp-<major>-dev, which puts the
# LINKER name under /usr/lib/llvm-<major>/lib while only the runtime libomp.so.N lands on
# the default path -- hence `ld: cannot find -lomp` with the package installed.
# pkg-config + libopenblas-dev: the BLAS optimizer links cblas_*. libfftw3-dev:
# the vexx port oracle links -lfftw3.
# build-essential: make + gcc + g++ (C/C++ backends). gfortran: the GNU Fortran backend.
# The LLVM half comes from apt.llvm.org in the next step, NOT from the distro -- see there.
# pkg-config + libopenblas-dev: the BLAS optimizer links cblas_*. libfftw3-dev: the vexx
# and cegterg port oracles link -lfftw3 and #include <fftw3.h>. Without it cegterg's
# toolchain probe fails and 17 port-fidelity cases SKIP; verify_toolchain.py checks the
# fftw3 pkg-config module so that provisioning gap is a red setup step, not a quiet skip.
# ninja + ccache are BUILD-SPEED dependencies, and both fail SILENTLY when absent rather
# than erroring, so they belong here rather than in whichever job noticed first:
# ninja -- DaCe picks its CMake generator with `shutil.which('ninja')` and only replays
# recorded compile commands when it picked Ninja (codegen/compiler.py). Without
# it, `compiler.command_cache` still reads True, CMake falls back to Make, and
# every SDFG pays a full configure. Nothing reports it; the build is just slow.
# ccache -- DaCe knows nothing about ccache. It helps only through a compiler launcher or
# a PATH shim, so the package has to exist before either can point at it.
sudo apt-get update
sudo apt-get install -y build-essential gfortran clang flang libomp-dev pkg-config libopenblas-dev libfftw3-dev
sudo apt-get install -y build-essential gfortran pkg-config libopenblas-dev libfftw3-dev \
ninja-build ccache

- name: LLVM toolchain (clang / clang++ / flang / libomp)
shell: bash
run: |
# ubuntu-latest ships LLVM 18, whose Fortran driver is still spelled `flang-new`. The
# harness is developed and measured against LLVM 21 (flags.POLLY_PAR's Polly findings, the
# clang OpenMP-spelling measurements behind flags.PLUTO_PAR), so CI runs the same major --
# a CI-only LLVM is how a count comes out 0 on a dev box and nonzero on a runner with
# nothing in the log to say the toolchains differed.
#
# libomp-21-dev is the SECOND OpenMP runtime, required rather than optional:
# tests/test_fork_openmp_safety.py asserts on it because libgomp deadlocks across fork()
# and libomp recovers, so a suite that only ever sees libgomp cannot tell the fix from the
# forgiving runtime. It puts the LINKER name under /usr/lib/llvm-21/lib while only the
# runtime libomp.so.N lands on the default path -- hence `ld: cannot find -lomp` with the
# package installed, which languages.LLVM_LIB_GLOBS is what resolves.
#
# The symlinks are NOT cosmetic. languages.resolve_compiler falls back to the highest
# `<name>-<major>` on PATH, but flags.polly_capability probes bare `shutil.which("clang")`
# and compilers.yaml names the drivers unversioned -- so without these, a distro clang left
# on the box would keep winning and the LLVM columns would silently stay on 18.
# /usr/local/bin precedes /usr/bin on the runner's PATH.
set -euo pipefail
LLVM_MAJOR=21
for attempt in 1 2 3; do
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc > /dev/null && break
echo "apt.llvm.org key fetch attempt $attempt failed; retrying in $((attempt * 5))s" >&2
sleep $((attempt * 5))
done
codename=$(lsb_release -cs)
echo "deb http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-${LLVM_MAJOR} main" \
| sudo tee /etc/apt/sources.list.d/llvm.list > /dev/null
sudo apt-get update
sudo apt-get install -y "clang-${LLVM_MAJOR}" "flang-${LLVM_MAJOR}" "libomp-${LLVM_MAJOR}-dev"
for driver in clang clang++ flang; do
sudo ln -sf "/usr/bin/${driver}-${LLVM_MAJOR}" "/usr/local/bin/${driver}"
done
clang --version | head -1
flang --version | head -1

- name: Base Python deps (translators + the frameworks every phase shares)
shell: bash
Expand All @@ -40,9 +85,7 @@ runs:
pytest pytest-timeout pytest-xdist pytest-cov sympy jinja2 cffi tree-sitter-language-pack psutil py-cpuinfo
pip_retry -e .
# DaCe: editable install of spcl/dace @ extended (the branch HPCAgent-Bench develops against), NOT the
# stock PyPI wheel. extended carries compiler.build_mode=native, which compiles each SDFG by
# invoking the compiler directly and skips the per-SDFG cmake configure -- cutting the framework
# + translator SDFG build time. Shallow clone keeps it fast; editable so the native codegen loads.
# stock PyPI wheel. Shallow clone keeps it fast; editable so the codegen loads.
# --recurse-submodules is REQUIRED: dace vendors its runtime headers as git submodules
# (external/moodycamel/blockingconcurrentqueue.h is included by dace/runtime/include/dace/
# stream.h), so a plain shallow clone builds an SDFG straight into
Expand All @@ -51,8 +94,14 @@ runs:
--branch extended https://github.com/spcl/dace.git "$RUNNER_TEMP/dace"
pip_retry -e "$RUNNER_TEMP/dace"
pip_retry "jax[cpu]" numba pythran pyarrow
# Turn on native SDFG builds for every subsequent step in the job (no cmake per SDFG).
echo "DACE_compiler_build_mode=native" >> "$GITHUB_ENV"
# DELIBERATELY no `DACE_compiler_build_mode=native` here. It used to be exported for speed
# (native skips the per-SDFG cmake configure), and it silently DEFEATED the build cache the
# framework pins: a DACE_* environment variable outranks Config.set, so
# dace_framework.BUILD_CACHE_PINS asked for `cmake` on every job and got `native` -- which
# writes per-object .o.cmd files, produces no compile_commands.json, and therefore makes
# `compiler.command_cache` inert while still reporting True. The two optimizations are
# mutually exclusive and only one of them is the framework's stated design, so the env var
# goes and the pin decides. tests/test_dace_flavors.py fails if that inverts again.

- name: Verify common toolchain (fail fast on a missing dependency)
shell: bash
Expand Down
10 changes: 10 additions & 0 deletions .github/dedicated_tests.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,13 @@ tests/test_container_launch.py
# --- QUARANTINE: not run anywhere, each needs a decision ----------------------------------------
# Nothing is quarantined today. A file added below runs NOWHERE, so it needs a one-line reason and
# an owner -- an unexplained entry here is the same silent inertness this file exists to end.

# --- port fidelity: the corpus vs what it was ported from ---------------------------------------
# Needs the whole DaCe frontend over 576 generated programs -- minutes, one subprocess each --
# which the cheap unit sweep's runner has neither the time nor the dependency for.
tests/test_dace_frontend_validity.py
# Phase 8b on the same runner: needs CPU torch plus the third_party/KernelBench submodule, neither
# of which the unit sweep's runner has -- there it would `importorskip` torch and pass without
# comparing anything. Its helper (tests/kernelbench_agreement.py) is not listed: this file names
# only test_*.py files, which is the set the sweep's `ls` and tests/test_ci_coverage.py both use.
tests/test_kernelbench_torch_agreement.py
Loading