mirror of
https://github.com/manifoldbt/manifoldbt.git
synced 2026-11-02 07:56:11 +00:00
GitHub's hosted runners have no GPU, so the sweeps job only ever measures the CPU path. A new workflow, bench-gpu.yml, runs the same three grids, on the same data and the same strategy imported from vs_vectorbt, on a Modal L4, with the CPU of that machine beside it on 4 reserved cores. The harness fails a point when the GPU sweep falls back to the CPU (the engine only warns), when any cell differs from the CPU grid beyond the gate the CPU job uses, when a repetition does not reproduce the first call, or when the licence tier changes. It calibrates the card and runs each point once untimed before timing, and reports that first call apart. The result is published to benchmarks/gpu/results/latest.json, separate from the CPU file, only for a green run of the latest version on the L4. Without a Modal token the job warns and measures nothing. Checked on a workstation (RTX 3090, PyPI wheel 0.28.1): every cell bit-identical to the CPU on all three points; with the card hidden, a run stops at calibration, and a sweep forced onto the CPU raises the warning the harness catches (the verdict it then gives is covered by the tests); 19 offline tests pass and actionlint is clean. Not yet run on Modal: that needs the token.