Skip to content

Compute GPU FPFH descriptors from resident radius neighborhoods - #167

Merged
rsasaki0109 merged 1 commit into
mainfrom
codex/gpu-fpfh-descriptors
Oct 12, 2026
Merged

rsasaki0109 merged 1 commit into
mainfrom
codex/gpu-fpfh-descriptors

Conversation

@rsasaki0109

Copy link
Copy Markdown
Owner

FPFH previously stopped at CPU descriptor computation even when radius neighborhoods could remain on GPU. Add the opt-in register-fpfh-gpu API and resident GPU primitives: explicitly upload positions/unit normals and the CPU-built tree, retain input-bound radius rows, and run SPFH plus weighted FPFH in two device passes without intermediate readback. The explicit wrapper returns original-order descriptors and complete payload transfer receipts; CPU validation/tree construction, default descriptors, feature matching and RANSAC retain their existing paths.

Capacity includes self and must fit every radius match. Incomplete rows and invalid row counts/indices set GPU status, zero the entire descriptor output and reject at explicit download. Resident callers must inspect status. Inputs, neighborhoods and outputs enforce runtime/frame ownership; retained outputs survive scratch reuse and concurrent calls. GPU angular rounding can change bins near boundaries; browser execution is not claimed.

Validation: 1,205,424 descriptor values across planar, curved, coincident and signed-axis-normal fixtures (maximum observed CPU difference 0.000045776367, selected-fixture tolerance 0.002); analytic planar/degenerate checks; exact receipts; overflow/poisoned-index/ownership/concurrency tests; facade smoke; all-feature GPU regression (199 passed, 23 ignored), registration library regression (35 passed, one ignored), all-feature and CPU-only Clippy, minimal/WASM compilation and formatting. Existing CPU FPFH source is unchanged outside the optional API addition. Adapter integration tests require explicit execution; two isolated CI feature profiles compile them on hosted runners.

Two isolated release surveys retain every sample and compare complete calls against the current CPU implementation, including its four workers at 65,537 points. Selected fixtures show paired geometric-mean CPU/full-GPU ratios of 1.61-3.31x at that size; 257-point cases favor CPU. Resident timings exclude preparation, uploads, neighborhood generation and download. Measurements, bootstrap intervals, variability and reproduction are recorded in FPFH measurement note. This follows merged PR #166.

@rsasaki0109
rsasaki0109 merged commit 90e2f1d into main Oct 12, 2026
119 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