You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
One workload-level PhysicalASAPDAG and PlanOutput deduplication — after #511 #521
For a root that reaches a shared state, assembly's raw-vs-summary check (feat: share identical summary producers across queries after Pass 1 #515) compares that root's raw cost over the union's reads with the whole shared state. This is approximate unless the members cost about the same per read.
Planning and selection of a candidate run per target group rather than as one whole-workload candidate costed as a unit. CandidateDagInventory / enumerate_candidate_dags exist, but only tests use them.
Blocked on
Implementation of #511 (unified operator graph: OperatorNode with common metadata, no KeepPreAsap wrappers). Do not start before #511 is implemented.
The merged per-workload graph should be built on #511's common operator graph rather than on today's per-root post-ASAP DAG.
Scope
Assemble the selected per-root plans into one workload DAG with shared nodes deduplicated, and compile that DAG into one PhysicalASAPDAG.
PlanOutput carries the workload-level plan, each query's root ID, and deduplicated deployments.
Closing as done. On main the workload is planned, costed and exported as one DAG.
One workload DAG, shared nodes once: Stage 2 compiles each candidate into one multi-root PhysicalASAPDAG, with one memo for the whole workload (crates/asap-aware-mapping/src/stage2_physical_asap_optimization.rs: optimize_physical_asap → compile_physical_asap_workload_with_node_ids, feat(planner): physical ASAP-aware optimization and plan selection for candidate logical ASAP DAGs #576). PlanOutput::execution_timed_dag (crates/asap-aware-mapping/src/pass/mod.rs, feat(planner): export a planned workload as one physical ASAP DAG #666) exports the selected plan the same way. Operator queries become roots and scalar queries become scalar_roots, and each shared sub-DAG is exported once (crates/types/src/ir/physical_export.rs: compile_physical_asap_workload).
One leftover: PlanOutput.plans still lists one root per query over shared Rc nodes. Its doc comment still says consumers dedupe by Rc::ptr_eq. execution_timed_dag() and operators() already give the deduplicated view.
Activity
zzylol commentedon Oct 15, 2026
Closing as done. On main the workload is planned, costed and exported as one DAG.
PhysicalASAPDAG, with one memo for the whole workload (crates/asap-aware-mapping/src/stage2_physical_asap_optimization.rs:optimize_physical_asap→compile_physical_asap_workload_with_node_ids, feat(planner): physical ASAP-aware optimization and plan selection for candidate logical ASAP DAGs #576).PlanOutput::execution_timed_dag(crates/asap-aware-mapping/src/pass/mod.rs, feat(planner): export a planned workload as one physical ASAP DAG #666) exports the selected plan the same way. Operator queries becomerootsand scalar queries becomescalar_roots, and each shared sub-DAG is exported once (crates/types/src/ir/physical_export.rs:compile_physical_asap_workload).stage1_to_stage3.rs:stage1_logical_asap_optimization, feat(planner): compose candidate logical ASAP DAGs from Pass 1 per-computation candidates #575). Stage 3 prices each candidate's single physical DAG node by node, so a shared node is costed once (crates/asap-aware-mapping/src/stage3_plan_selection.rs:select_plan→price(&candidate.dag, …), feat(planner): physical ASAP-aware optimization and plan selection for candidate logical ASAP DAGs #576). This replaces the per-group selection and feat: share identical summary producers across queries after Pass 1 #515's approximate shared-root raw-vs-summary check. feat(planner): run the planning stages as the planner pipeline; retire MajorPass #674 retiredMajorPass.One leftover:
PlanOutput.plansstill lists one root per query over sharedRcnodes. Its doc comment still says consumers dedupe byRc::ptr_eq.execution_timed_dag()andoperators()already give the deduplicated view.