- Each expert gets max_chunks*128 rows at fixed offsets (e*max_chunks*128) - Phase 1 scatters into fixed offsets with clamped local_row - Phase 2 reads from fixed offsets (pure Python arithmetic, no GPU sync) - padded_x_sf_buf sized for num_experts * max_chunks * 128 - padded_expert_offsets pre-computed in _allocate_buffers