iter	method	total_ms	speedup	identity	mem_mb	guard	note
0	chamferdist (reference)	592.11	1.00	ref	26.8	ref	baseline: 2v 10.3 / 12v 116 / 24v 466
1	triton_brute bn64 bm128	1996.22	0.30	ok	24.3	PASS	correct+mem-light but untuned tiling, 3.3x slower
2	triton_brute block-tuning UP	-	-	ok	-	-	bigger BLOCK_N spills (bn128 550ms->bn512 15900ms @12v search). wrong direction.
3	triton_brute bn16 bm512 w2	330.58	1.79	ok	24.3	PASS	CHAMPION(synthetic M): tiny bn + wide bm + 2 warps -> high occupancy beats V3
4	REAL-DATA correction	-	-	-	-	-	chamfer target = 4 TARGET-view depth (loss_on_context=false) -> M~254k CONSTANT, not views*252^2. synthetic M was 3-6x too big.
5	champion @REAL sizes	75.64	1.83	ok	11.9	PASS	bn16/bm512/w2 holds on real M~254k: 6v 1.86/12v 1.84/24v 1.85x, all identical (real_clouds.pt)
6	bf16 @REAL geometry	-	-	-	-	-	loss<0.6%, grad cos 0.985-0.999 (vs synthetic 0.87). real near-ties are coplanar->grad stable. A/B before adopting.
7	precision sweep @REAL	-	-	-	-	-	low-prec search + fp32 backward: fp16 grad cos 0.998-0.9999 (5% disagree) >> bf16 0.987 (30%). NO speedup (occupancy-bound not mem-bound). keep fp32.
8	re-tune @REAL sizes	59.49	2.33	ok	11.9	PASS	NEW CHAMPION bn8/bm512/w1: w1>w2 and bn8>bn16 at real M~254k. num_stages>1 hurts (occupancy). 6v 2.5/12v 2.4/24v 2.4x, identical.
9	grid REJECTED	-	-	-	-	-	trained: 379x candidate cut but stray tail+divergence. INIT (blob far from surface): only 2x (cells hold ~2489 targets). grid helps when chamfer least needed, fails at init. keep brute force.
