Skip to content

Commit

Permalink
Merge pull request #976 from aprokop/fixing_perf
Browse files Browse the repository at this point in the history
Change spatial traversal to fix perf regression from #897
  • Loading branch information
aprokop committed Dec 7, 2023
2 parents fbd2584 + e61159f commit 851e915
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 31 deletions.
21 changes: 7 additions & 14 deletions src/details/ArborX_DetailsHalfTraversal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,25 +61,18 @@ struct HalfTraversal
int node = HappyTreeFriends::getRope(_bvh, i);
while (node != ROPE_SENTINEL)
{
bool const is_leaf = HappyTreeFriends::isLeaf(_bvh, node);

if (is_leaf ? predicate(HappyTreeFriends::getIndexable(_bvh, node))
: predicate(HappyTreeFriends::getInternalBoundingVolume(
_bvh, node)))
if (HappyTreeFriends::isLeaf(_bvh, node))
{
if (is_leaf)
{
if (predicate(HappyTreeFriends::getIndexable(_bvh, node)))
_callback(leaf_permutation_i, HappyTreeFriends::getValue(_bvh, node));
node = HappyTreeFriends::getRope(_bvh, node);
}
else
{
node = HappyTreeFriends::getLeftChild(_bvh, node);
}
node = HappyTreeFriends::getRope(_bvh, node);
}
else
{
node = HappyTreeFriends::getRope(_bvh, node);
node =
(predicate(HappyTreeFriends::getInternalBoundingVolume(_bvh, node))
? HappyTreeFriends::getLeftChild(_bvh, node)
: HappyTreeFriends::getRope(_bvh, node));
}
}
}
Expand Down
27 changes: 10 additions & 17 deletions src/details/ArborX_DetailsTreeTraversal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,27 +104,20 @@ struct TreeTraversal<BVH, Predicates, Callback, SpatialPredicateTag>
int node = HappyTreeFriends::getRoot(_bvh); // start with root
do
{
bool const is_leaf = HappyTreeFriends::isLeaf(_bvh, node);

if (is_leaf ? predicate(HappyTreeFriends::getIndexable(_bvh, node))
: predicate(HappyTreeFriends::getInternalBoundingVolume(
_bvh, node)))
if (HappyTreeFriends::isLeaf(_bvh, node))
{
if (is_leaf)
{
if (invoke_callback_and_check_early_exit(
_callback, predicate, HappyTreeFriends::getValue(_bvh, node)))
return;
node = HappyTreeFriends::getRope(_bvh, node);
}
else
{
node = HappyTreeFriends::getLeftChild(_bvh, node);
}
if (predicate(HappyTreeFriends::getIndexable(_bvh, node)) &&
invoke_callback_and_check_early_exit(
_callback, predicate, HappyTreeFriends::getValue(_bvh, node)))
return;
node = HappyTreeFriends::getRope(_bvh, node);
}
else
{
node = HappyTreeFriends::getRope(_bvh, node);
node =
(predicate(HappyTreeFriends::getInternalBoundingVolume(_bvh, node))
? HappyTreeFriends::getLeftChild(_bvh, node)
: HappyTreeFriends::getRope(_bvh, node));
}
} while (node != ROPE_SENTINEL);
}
Expand Down

0 comments on commit 851e915

Please sign in to comment.