Repository navigation
Compute GPU FPFH descriptors from resident radius neighborhoods - #167
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
FPFH previously stopped at CPU descriptor computation even when radius neighborhoods could remain on GPU. Add the opt-in
register-fpfh-gpuAPI 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.