Context
Arrival/required propagation is single-threaded. Large routed blocks leave cores idle.
Task
Levelize the timing graph (topological levels) and propagate independent nodes in parallel within each level; do the backward (required) pass the same way. Keep the engine dependency-free — use std::thread::scope, no external crates. Level barriers make results order-independent and deterministic.
API
--threads N (default = available parallelism; --threads 1 = current behaviour).
Acceptance
- bit-identical results vs single-threaded across the whole test suite (determinism test);
- measured speed-up on a large routed block (report scaling);
- no new dependencies.
Context
Arrival/required propagation is single-threaded. Large routed blocks leave cores idle.
Task
Levelize the timing graph (topological levels) and propagate independent nodes in parallel within each level; do the backward (required) pass the same way. Keep the engine dependency-free — use
std::thread::scope, no external crates. Level barriers make results order-independent and deterministic.API
--threads N(default = available parallelism;--threads 1= current behaviour).Acceptance