Class providing a strategy for geometry-level parallelization of SAH 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...
|
void | GEOM_defineSplit (KDTreeNode *node, KDTreeNode *parent, vector< Primitive * > &primitives, int const depth, int const assignedThreads) const override |
| Geometry-level parallel version of the SAHKDTreeFactory::defineSplit function. More...
|
|
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) override |
| Geometry-level parallel version of the SAHKDTreeFactory::buildChildrenNodes. More...
|
|
virtual double | GEOM_findSplitPositionBySAH (KDTreeNode *node, vector< Primitive * > &primitives, int assignedThreads) const |
| Geometry-level parallel version of the SAHKDTreeFactory::findSplitPositionBySAH 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...
|
|
Class providing a strategy for geometry-level parallelization of SAH 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.
- Author
- Alberto M. Esmoris Pena
- Version
- 1.0
- See also
- SimpleKDTreeGeometricStrategy
double SAHKDTreeGeometricStrategy::GEOM_findSplitPositionBySAH |
( |
KDTreeNode * |
node, |
|
|
vector< Primitive * > & |
primitives, |
|
|
int |
assignedThreads |
|
) |
| const |
|
protectedvirtual |
Geometry-level parallel version of the SAHKDTreeFactory::findSplitPositionBySAH function.
- Parameters
-
assignedThreads | How many threads can be used to parallelize computations |
- See also
- SAHKDTreeFactory::findSplitPositionBySAH
Using assignedThreads = min(assignedThreads, lossNodes) is expected to work properly because each node requires iterating over the entire set of primitives, which during upper tree levels (those handled by geometry-level parallelization) is expected to be high. However, if performance problems are diagnosed when using lossNodes >= assignedThreads or even lossNodes+x >= assignedThreads for small values of x, then switching strategy to something like assignedThreads = min(assignedThreads, lossNodes/k), for k > 1, might alleviate the problem with an adequate k.
Reimplemented in FastSAHKDTreeGeometricStrategy.