Vimes ran mutants in parallel (Vimes.go(path; procs=4)). Gremlins doesn't. It runs them one at a time — the warm pool is single-worker, and the n_workers parameter is a no-op today.
Campaign wall-time is dominated by re-running the suite, so spreading mutants across worker processes is the single biggest speedup on offer for large runs.
Mutants are independent — no shared state — so each worker can own its own shadow. The work: a process pool, a shadow per worker, and a merge step that preserves deterministic result ordering and the current killed/survived/etc. classification. That last part is the fiddly bit, which is why this is help-wanted rather than good-first.
Vimes ran mutants in parallel (
Vimes.go(path; procs=4)). Gremlins doesn't. It runs them one at a time — the warm pool is single-worker, and then_workersparameter is a no-op today.Campaign wall-time is dominated by re-running the suite, so spreading mutants across worker processes is the single biggest speedup on offer for large runs.
Mutants are independent — no shared state — so each worker can own its own shadow. The work: a process pool, a shadow per worker, and a merge step that preserves deterministic result ordering and the current killed/survived/etc. classification. That last part is the fiddly bit, which is why this is help-wanted rather than good-first.