Helios++
Helios software for LiDAR simulations
|
Class providing a strategy for geometry-level parallelization of Simple KDTree building. The geometry-level parallelization is the one to be applied on upper tree nodes, where multiple threads work on the building of the same node. More...
#include <SimpleKDTreeGeometricStrategy.h>
Public Member Functions | |
SimpleKDTreeGeometricStrategy (SimpleKDTreeFactory &kdtf) | |
SimpleKDTreeGeometricStrategy default constructor. More... | |
virtual SimpleKDTreeGeometricStrategy * | clone (SimpleKDTreeFactory *kdtf) const |
Create a clone of the SimpleKDTreeGeometricStrategy. More... | |
Protected Member Functions | |
virtual void | GEOM_defineSplit (KDTreeNode *node, KDTreeNode *parent, vector< Primitive * > &primitives, int const depth, int const assignedThreads) const |
Geometry-level parallel version of the SimpleKDTreeFactory::defineSplit function. More... | |
virtual void | GEOM_computeNodeBoundaries (KDTreeNode *node, KDTreeNode *parent, bool const left, vector< Primitive * > const &primitives, int assignedThreads) |
Geometry-level parallel version of the SimpleKDTreeFactory::computeNodeBoundaries function. More... | |
virtual void | GEOM_populateSplits (vector< Primitive * > const &primitives, int const splitAxis, double const splitPos, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives, int assignedThreads) const |
Geometry-level parallel version of the SimpleKDTreeFactory::populateSplits function. More... | |
virtual void | GEOM_buildChildrenNodes (KDTreeNode *node, KDTreeNode *parent, vector< Primitive * > const &primitives, int const depth, int const index, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives, std::shared_ptr< SharedTaskSequencer > masters) |
Geometry-level parallel version of the SimpleKDTreeFactory::buildChildrenNodes function. More... | |
Protected Attributes | |
SimpleKDTreeFactory & | kdtf |
The simple KDTree factory to which geometric strategy shall be applied. | |
Friends | |
class | MultiThreadKDTreeFactory |
Class providing a strategy for geometry-level parallelization of Simple KDTree building. The geometry-level parallelization is the one to be applied on upper tree nodes, where multiple threads work on the building of the same node.
|
inline |
SimpleKDTreeGeometricStrategy default constructor.
|
virtual |
Create a clone of the SimpleKDTreeGeometricStrategy.
kdtf | The KDTreeFactory to be referenced by the clone |
Reimplemented in SAHKDTreeGeometricStrategy, FastSAHKDTreeGeometricStrategy, and AxisSAHKDTreeGeometricStrategy.
|
protectedvirtual |
Geometry-level parallel version of the SimpleKDTreeFactory::buildChildrenNodes function.
It is expected that this function is called at any depth before the last geometry-level depth. In consequence, the left node is delegated upon current thread while right node is delegated upon a new created thread for such purpose.
Reimplemented in SAHKDTreeGeometricStrategy.
|
protectedvirtual |
Geometry-level parallel version of the SimpleKDTreeFactory::computeNodeBoundaries function.
assignedThreads | How many threads can be used to parallelize computations |
|
protectedvirtual |
Geometry-level parallel version of the SimpleKDTreeFactory::defineSplit function.
assignedThreads | How many threads can be used to parallelize computations |
Reimplemented in SAHKDTreeGeometricStrategy, and AxisSAHKDTreeGeometricStrategy.
|
protectedvirtual |
Geometry-level parallel version of the SimpleKDTreeFactory::populateSplits function.
assignedThreads | How many threads can be used to parallelize computations |