CloudCompare / CCCoreLib

C++ library which provides data structures & algorithms for working with 3D point cloud data
Other
158 stars 51 forks source link

(Discussion) Initial refactor resampleCloudSpatially for multi-threading #67

Open nigels-com opened 3 years ago

nigels-com commented 3 years ago

Note: This branch is untested. It does compile.

I have a heavily refactored version of resampleCloudSpatially that supports multi-threading. In terms of licensing, ideally I could contribute that upstream rather than LGPL the surrounding code. So the purpose of this PR is to open a discussion of what might be agreeable all around.

The reasoning for this change:

And to be clear this PR does not multi-thread but is more aligned with my more severe refactor.

Further thoughts:

To broadly describe the multi-threading approach, have concurrent neighbour searching, but lock access to the markers with a mutex and check if the current point is still filtered-in before proceeding to filter-out the neighbourhood. We do see some occasional non-determinism due to the non-deterministic order of points being processed, but the speedup is worthwhile. With 12 threads we don't seem quite bottle-necked on updating markers, but that likely depends on the minimum distance and the typical neighbour count.

nigels-com commented 3 years ago

On a related note, I'm also interested in the potential for multi-threaded octree building. With 12 threads the resampling step is taking a similar amount of time to the octree indexing.

dgirardeau commented 3 years ago

Hi,

From what I see in this PR (at this point) the changes to the existing code base seem reasonable.

And if you wish to contribute your parallel version upstream, no problem ;)

dgirardeau commented 1 year ago

Hi @nigels-com, are you going to push this effort forward in the future?

nigels-com commented 1 year ago

It has been a fair while, indeed. I don't well recall the details of this, but will take a fresh look.