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
The per-window progress lines added in #150 show that pooled run_dada is not
a uniform workload, and that every phase figure we have ranked levers against
is a mean over a run that spans nearly a factor of two in occupancy.
What the lines show
Soil ITS2 R1, 64 threads, 30-second windows (main, verbose):
window
eff cores
clusters added
align
map
shuffle
bud+pupd
0–30 s
24.4
+492
1.62%
12.6 s
9.1 s
6.6 s
30–60 s
28.7
+617
0.76%
15.1 s
8.2 s
3.7 s
60–90 s
29.0
+639
0.42%
15.4 s
8.5 s
3.1 s
90–120 s
29.1
+643
0.27%
15.4 s
8.8 s
2.7 s
120–150 s
37.9
+832
1.01%
20.2 s
4.0 s
1.7 s
Occupancy climbs from ~22 to ~42 effective cores of 64 over a single run. The
end-of-run mean (~29) describes no window of it.
It is the serial fraction, not the workload
align falls six-fold and then rises again while occupancy climbs straight
through, so the alignment pass rate is not driving this. Serial work per window
collapses from 15.7 s to 5.7 s — roughly 52% of the early windows against
19% of the late ones.
Normalising for progress makes it sharper. Serial time per cluster added:
early: 15.7 s / 492 = 31.9 ms/cluster
late: 5.7 s / 832 = 6.9 ms/cluster
A 4.6× drop, so this is not simply "more clusters get added later". The early
rounds genuinely do far more shuffle and p-update work per bud, presumably
because the partition is unstable and more raws move per round.
Why this matters beyond curiosity
Our headline occupancy numbers are means over a bimodal run. "Effective
cores 31.4 → 38.4" (perf(compare): hoist e_minmax into a dense array — store −71%, run_dada −20% (#147) #148) and "map parallel efficiency 86–90%" have both been
used to rank levers. A change that helps the early serial-heavy phase and one
that helps the late map-heavy phase are indistinguishable in the totals.
b_p_update has never been targeted at all. It is fully serial and runs
18.2 s (R1) / 25.8 s (R2) of a 167 s / 211 s run_dada — 11–12% — and its
cost is concentrated in exactly the windows where occupancy is worst.
Proposed first step: measure, do not design
Consistent with what #143 established the hard way — do not design an
optimisation against a share-of-wall figure before re-measuring what it is made
of:
Progress lines on soil 16S as well as ITS2 (only ITS2 has been run),
and on both reads. 16S has 2.4× the clusters and a 5.6× higher align rate,
so the ramp may have a different shape or none at all.
Only then decide whether there is a lever. It is entirely possible the early
rounds are irreducibly serial and this closes as a documented property of the
algorithm — which would still be worth having written down.
Not to be assumed
A prediction made before looking was that occupancy should fall over the run,
because greedy skips increase as cluster centres get less abundant. That was
reasoning about the map, and the map is not where the answer is. Do not carry a
model of the bud loop into this without checking it against the lines.
Context: docs/findings/compare-store-scan.md ("The run is not uniform"), and DADA2RS_PROGRESS_SECS (#150) for the instrument.
The per-window progress lines added in #150 show that pooled
run_dadais nota uniform workload, and that every phase figure we have ranked levers against
is a mean over a run that spans nearly a factor of two in occupancy.
What the lines show
Soil ITS2 R1, 64 threads, 30-second windows (
main, verbose):alignOccupancy climbs from ~22 to ~42 effective cores of 64 over a single run. The
end-of-run mean (~29) describes no window of it.
It is the serial fraction, not the workload
alignfalls six-fold and then rises again while occupancy climbs straightthrough, so the alignment pass rate is not driving this. Serial work per window
collapses from 15.7 s to 5.7 s — roughly 52% of the early windows against
19% of the late ones.
Normalising for progress makes it sharper. Serial time per cluster added:
A 4.6× drop, so this is not simply "more clusters get added later". The early
rounds genuinely do far more shuffle and p-update work per bud, presumably
because the partition is unstable and more raws move per round.
Why this matters beyond curiosity
cores 31.4 → 38.4" (perf(compare): hoist e_minmax into a dense array — store −71%, run_dada −20% (#147) #148) and "map parallel efficiency 86–90%" have both been
used to rank levers. A change that helps the early serial-heavy phase and one
that helps the late map-heavy phase are indistinguishable in the totals.
b_shuffleoptimisation so far (Re-evaluate b_shuffle: its share grows with thread count, so #124's closure was conditional #132, Is b_shuffle's reconcile redundancy actually unreachable? Measure the necessary fraction #136, b_shuffle's build scan on high-diversity pools: ~38% of run_dada on a soil 16S set, and #87's own gate says it is winnable #139) was designed againstwhole-run totals. Whether they helped the early phase — where the serial
fraction actually lives — is unmeasured.
b_p_updatehas never been targeted at all. It is fully serial and runs18.2 s (R1) / 25.8 s (R2) of a 167 s / 211 s
run_dada— 11–12% — and itscost is concentrated in exactly the windows where occupancy is worst.
Proposed first step: measure, do not design
Consistent with what #143 established the hard way — do not design an
optimisation against a share-of-wall figure before re-measuring what it is made
of:
and on both reads. 16S has 2.4× the clusters and a 5.6× higher align rate,
so the ramp may have a different shape or none at all.
b_compare:split shuffle into reconcile/move/build and p-update into its own passes,
per window rather than per run.
found in the Measure b_compare: split screen vs alignment time before considering any redesign #127 thread sweep was measured from end-of-run totals and may
be a late-run property.
Only then decide whether there is a lever. It is entirely possible the early
rounds are irreducibly serial and this closes as a documented property of the
algorithm — which would still be worth having written down.
Not to be assumed
A prediction made before looking was that occupancy should fall over the run,
because greedy skips increase as cluster centres get less abundant. That was
reasoning about the map, and the map is not where the answer is. Do not carry a
model of the bud loop into this without checking it against the lines.
Context:
docs/findings/compare-store-scan.md("The run is not uniform"), andDADA2RS_PROGRESS_SECS(#150) for the instrument.