The 3D scene shows the same run as a grid of cubes lighting up together. This 2D companion instead draws the schedule itself: a Gantt chart with one lane per core, each bar sized exactly to the task-seconds that phase actually takes, plus a directly-plotted speedup curve S(N) computed independently for every N from 1 to 64 — not read off the live run, but solved fresh for each point on the x-axis. The underlying model is the same extended Amdahl's Law:
T(N) = (1−P)·T(1) + P·T(1)/N + O·N·T(1)
S(N) = T(1) / T(N)
E(N) = S(N) / N
Because the overhead term O·N·T(1) grows with N while the parallel term P·T(1)/N shrinks, T(N) has a genuine minimum (and S(N) a genuine maximum) at a specific core count — found by setting dT/dN = 0:
dT/dN = −P·T(1)/N² + O·T(1) = 0
N* = √(P / O)
That optimum is plotted directly on the curve as a dashed marker, and it moves left (fewer useful cores) as overhead O rises — exactly the effect that limits how far a real cluster or thread pool should be scaled before synchronization cost outweighs the extra compute. A standalone Node verification of this exact formula (see console script) confirmed the scanned peak of S(N) across integer N lands within one core of the closed-form N* = √(P/O) for every (P,O) tested, that S(N) is unimodal (rises then falls, never wiggles), and that with O=0 the curve correctly asymptotes to 1/(1−P) instead of climbing forever.
- Gantt lanes — row 0 alone shows the orange serial slice (everyone else is idle grey); all N rows show the cyan parallel slice together; the amber slice is coordination overhead paid by every core.
- Speedup curve — plotted for the full N=1..64 range at the current P and O, so you can see the peak and the falling tail even for core counts you aren't currently running.
- N* marker — the closed-form optimum; push overhead up and watch it slide toward 1, push it down and watch it slide toward 64 (or off the chart once N* exceeds 64).