Skip to content

Add resident GPU ICP transforms and centered moment reductions - #170

Merged
rsasaki0109 merged 1 commit into
mainfrom
codex/gpu-icp-reduction
Oct 12, 2026
Merged

rsasaki0109 merged 1 commit into
mainfrom
codex/gpu-icp-reduction

Conversation

@rsasaki0109

Copy link
Copy Markdown
Owner

ICP's GPU correspondence route still uploaded transformed queries and downloaded every match each iteration. Add align_with_gpu_reduction under register-icp-gpu and reusable GpuIcpInput/owned moments under gpu-wgpu: retain original source/target/tree, transform originals, match and reduce centered centroid/cross-covariance/fitness on GPU in six passes sharing one submission. Only 176 bytes of moments/status are explicitly downloaded per evaluation. CPU Horn solving and convergence remain; reuse post-update moments for the next update/final fitness. Four updates use five evaluations and 880 D2H bytes, compared with nine match batches and 4,718,664 bytes for 65,537 source points on the previous route.

The new API requires untrimmed ICP, finite extents and supported normalization/device limits; the existing CPU and GPU-correspondence routes retain their math and trimming support. Private scratch is leased through submission, pipeline caches belong to the runtime, and owned results outlive inputs. GPU overflow/malformed-match/numerical status invalidates all payload. f32 transforms/reductions can change matches, poses and stopping near gates or degenerate geometry; this is an explicit precision path, without automatic CPU fallback or CPU parity guarantees.

Two isolated release surveys retain all 24 conditions and 20 paired samples per stage. Complete calls improve 1.61-2.49x over the previous GPU route; at 65,537 points, CPU/new ratios are 5.01-7.14x. Small calls remain slower than CPU and the 4,097-point crossover varies between surveys. Benchmark pose-coordinate differences are at most 0.0000019073486; counts, raw fitness, transfer bytes, adverse timing cases and bootstrap intervals accompany the evidence note. Prepared resident timings exclude upload/readback/CPU solving and the iterative loop.

Validation passed: 211 GPU tests, 35 registration library tests, three new explicitly run adapter integration tests covering 54 scale/geometry/unequal-cloud cases and 41,067 transformed points, three existing correspondence GPU tests, and a facade adapter test. Independent f64 moments, exact receipts, overflow/zero-match/ownership/concurrency and convergence/configuration guards pass. CPU centroid/covariance/Horn/eigensolver arithmetic and ICP update/fitness/trimming loops are unchanged after shared helper extraction. All-feature/CPU-only Clippy, minimal GPU, WASM and Rustfmt passed. Existing feature-isolation CI cases cover the new entry point.

@rsasaki0109
rsasaki0109 merged commit 564300f into main Oct 12, 2026
123 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant