Skip to content

Add resident GPU GICP inverse weighting and normal-equation reductions - #171

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

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

Conversation

@rsasaki0109

@rsasaki0109 rsasaki0109 commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

GICP's GPU correspondence route still downloaded every match and computed rotated covariance inverses/Hessian/gradient/fitness on CPU. Add align_with_gpu_reduction under register-gicp-gpu and reusable GpuGicpInput/owned normal equations under gpu-wgpu. Five device passes retain positions/covariances, transform originals, reuse unbounded nearest traversal and reduce inverse-weighted equations/error in one submission. Explicit readback is 256 bytes per evaluation; post-update equations serve the next solve/final fitness. CPU k-NN or explicit radius-GPU covariance readback/re-upload remains preparation, with complete receipts.

CPU solves centered/scaled 6x6 equations and converts the linearized step to the existing world update/stopping convention. Packed SPD validation, target-inverse trace normalization and relative covariance Cholesky guards reject unsupported numerics, invalidating all result payload without CPU fallback. Device f32 weights and normalized solving can change matching/pose/stopping; ordinary CPU and correspondence GICP source remains unchanged. Private scratch is leased through submission and owned results survive input drops/concurrent calls.

Two isolated release surveys retain 24 conditions and 20 paired samples per stage. Previous-GPU/new point estimates are 1.05-1.73x; two small-gain conditions have intervals including 1. Small inputs remain slower than the ordinary API. At 65,537 points, CPU k-NN preparation drops total D2H from 3,670,072 to 1,024 bytes; radius preparation still includes covariance readback, giving 4,195,392 total bytes versus 7,864,440 previously. Counts, raw fitness, precision differences, timing variability and bootstrap intervals are in the evidence note. Prepared-stage timings consistently use radius covariances and exclude preparation/readback/CPU solving.

Validation passed: 215 GPU tests, 35 registration library tests, two explicitly run adapter integrations covering 108 pose/scale/covariance/stopping conditions and 98,928 points, three existing GICP GPU tests and a facade test. Independent f64 covariance inversion/Jacobian/full H/g comparisons, world-basis conversion, strict conditioning/overflow/status, exact receipts, unequal clouds/outliers and concurrency pass. All-feature/CPU-only Clippy, minimal GPU, WASM and Rustfmt pass. Existing CPU/correspondence GICP and ICP device math is unchanged; current feature-isolation CI covers the new APIs.

@rsasaki0109
rsasaki0109 changed the base branch from codex/gpu-icp-reduction to main October 12, 2026 23:18
@rsasaki0109
rsasaki0109 merged commit 392427f 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