Sharing the first experiment you asked for.
Experiment 1 (compounding check). One chip, no synchronization, 200 steps, identical seed and identical batches. I compared per-step training loss between the NPU run (our manual backward pass) and a reference run of the same model and batches on CPU with fp32 autograd. Weights are expected to diverge, so the loss curve is the fair comparison.
Per-step loss (CPU fp32 / NPU):
step 0: 5.674 / 5.677
step 50: 2.240 / 2.227
step 100: 2.026 / 2.019
step 150: 1.580 / 1.557
step 199: 1.499 / 1.465
Mean absolute gap 0.012, max 0.037. The NPU curve is not above fp32 (it ends slightly below), and the drift stays tiny.
So over 200 steps the NPU manual backward tracks exact fp32 closely. The final gap is therefore not due to NPU arithmetic.
Experiment 2 (the synchronization-schedule control) is being measured separately with a fair apples-to-apples setup, and I will post those numbers once it is complete.
Thanks for the careful read.