Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MultiThreading] Parallel BVH narrow phase #2053

Merged
merged 21 commits into from
May 10, 2021

Conversation

alxbilger
Copy link
Contributor

@alxbilger alxbilger commented Apr 29, 2021

Based on #2043

A new component is introduced: ParallelBVHNarrowPhase. As the name suggests, it is the parallel implementation of BVHNarrowPhase.

Details

The broad phase provides a list of pairs of collision models. In the initial BVHNarrowPhase component, the list was processed sequentially. In ParallelBVHNarrowPhase each pair is processed in a task, which is given to a thread pool.

Note that the traversal of the bounding volume hierarchy is not parallel. It is still single threaded.

Due to race conditions, some operations must be done prior to the parallel tasks:

  1. Detection output creation. This operation is very time consuming (see [SofaKernel] Switch from map_ptr_stable_compare to std::unordered_map #2047). If [SofaKernel] Switch from map_ptr_stable_compare to std::unordered_map #2047 is merged, we can expect better results.
  2. Topology initialization.

Results

The tested scene is applications/plugins/MultiThreading/examples/ParallelBruteForceBroadPhase.scn during 500 time steps.

The narrow phase duration has been measured with ParallelBVHNarrowPhase compared to BVHNarrowPhase.

BVHNarrowPhase                   3.5  ms
BVHNarrowPhase + PR#2047         2.36 ms
ParallelBVHNarrowPhase           2.1  ms
ParallelBVHNarrowPhase + PR#2047 0.97 ms

By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).


Reviewers will merge this pull-request only if

  • it builds with SUCCESS for all platforms on the CI.
  • it does not generate new warnings.
  • it does not generate new unit test failures.
  • it does not generate new scene test failures.
  • it does not break API compatibility.
  • it is more than 1 week old (or has fast-merge label).

…aceDetection

RayTraceDetection inherits from BruteForceBroadPhase. It makes more sense because the broad phase of RayTraceDetection was actually a brute force broad phase.
The component is a parallel implementation of BruteForceBroadPhase
@alxbilger alxbilger added pr: new feature Implement a new feature pr: status to review To notify reviewers to review this pull-request labels Apr 29, 2021
@alxbilger
Copy link
Contributor Author

[ci-build][with-all-tests]

@hugtalbot hugtalbot added pr: status ready Approved a pull-request, ready to be squashed and removed pr: status to review To notify reviewers to review this pull-request labels May 5, 2021
@hugtalbot hugtalbot merged commit 6e27f36 into sofa-framework:master May 10, 2021
@guparan guparan added this to the v21.06 milestone Jun 28, 2021
@alxbilger alxbilger deleted the parallel_narrow_phase branch June 28, 2022 10:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr: new feature Implement a new feature pr: status ready Approved a pull-request, ready to be squashed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants