Skip to content

Parallelize bounded CPU FPFH descriptor phases - #145

Merged
rsasaki0109 merged 1 commit into
mainfrom
codex/parallel-fpfh-descriptors
Oct 11, 2026
Merged

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

Conversation

@rsasaki0109

Copy link
Copy Markdown
Owner

FPFH computed every SPFH row and weighted descriptor on the caller despite independent point work in each phase. Share one caller-built KD-tree across bounded scoped CPU workers, writing disjoint contiguous slices directly into the existing descriptor arrays. Join all SPFH workers before weighting reads their rows. Reuse existing point staging; small/one-worker clouds stay serial.

Each point keeps the unsorted radius-neighbor order, Darboux/bin/normalization math and 33-bin f32 accumulation order. Matching, seeded RANSAC and validation retain their existing execution. Public signatures and dependencies are unchanged. Scratch remains neighborhood-dependent per worker; concurrent calls have their own budgets.

Validation:

  • Five new tests compare 18,402,648 exact descriptor words against the frozen serial public API with forced 1/2/6 workers and public staging, including duplicate/curved/planar inputs and 32,771-point uneven bands. Independent planar/degenerate expectations, invalid inputs, concurrency and finite/converged seeded alignment are covered.
  • 19 minimal and 35 all-feature registration tests pass, plus the minimal facade smoke. Strict minimal/all-feature Clippy, facade Clippy, crate/facade WASM compilation, formatting and diff checks pass. WASM execution is not claimed.
  • Twelve release completed-API conditions, two warmups and twenty rotating old/forced-serial/public rounds each; every output matches frozen descriptor bits. Timers include validation, lifting, KD-tree build, both allocations/phases, worker spawn/join and intermediate destruction.
  • Observed old/public ratios are 1.421–1.458 at 32,768 points/two workers and 2.375–2.595 at 65,536/four. All six multi-worker intervals are above one. One-worker public controls range 0.984–1.000, with small regressions; all controls and ranges are recorded without a portable scaling guarantee.

Implementation and full measurement note.

Based on merged PR #144 (main f83ed25). Merge is gated on the frozen source head, all 114 named checks succeeding, no pending/failed checks and a clean merge state.

@rsasaki0109
rsasaki0109 merged commit 95fb8e8 into main Oct 11, 2026
115 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