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

Workaround for Stack performance #306

Merged
merged 2 commits into from
May 20, 2020
Merged

Workaround for Stack performance #306

merged 2 commits into from
May 20, 2020

Conversation

aprokop
Copy link
Contributor

@aprokop aprokop commented May 18, 2020

Comparing the current implementation with the original Karras algorithm.
I have spent little time figuring why the new one is so much faster, and whether it could be reimplemented using the existing Stack structures (I tried doing a straightforward replacement, but that immediately slowed down).

Update: our current understanding of the problem is that having a struct results in register spilling.

@aprokop aprokop added the performance Something is slower than it should be label May 18, 2020
Copy link
Contributor

@dalg24 dalg24 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking until we can figure out that we cannot achieve the same performance with a Stack<Node const *>

Also, the changes to the unit tests are not the right fix because they remain sensitive to the way we implement the search.

Node const **stack_ptr = stack;
*stack_ptr++ = NULL;
Node const *node = bvh_.getRoot();
int count = 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need count

@dalg24
Copy link
Contributor

dalg24 commented May 18, 2020

I tried doing a straightforward replacement, but that immediately slowed down

Can you confirm that this is what you tried?

diff --git a/src/details/ArborX_DetailsTreeTraversal.hpp b/src/details/ArborX_DetailsTreeTraversal.hpp
index c664705..592380e 100644
--- a/src/details/ArborX_DetailsTreeTraversal.hpp
+++ b/src/details/ArborX_DetailsTreeTraversal.hpp
@@ -85,11 +85,9 @@ struct TreeTraversal<BVH, Predicates, Callback, SpatialPredicateTag>
   {
     auto const &predicate = Access::get(predicates_, queryIndex);

-    Node const *stack[64];
-    Node const **stack_ptr = stack;
-    *stack_ptr++ = NULL;
+    Stack<Node const *> stack;
+    stack.push(nullptr);
     Node const *node = bvh_.getRoot();
-    int count = 0;
     do
     {
       Node const *child_left = bvh_.getNodePtr(node->children.first);
@@ -105,7 +103,6 @@ struct TreeTraversal<BVH, Predicates, Callback, SpatialPredicateTag>
       if (overlap_right && child_right->isLeaf())
       {
         callback_(queryIndex, child_right->getLeafPermutationIndex());
-        count++;
       }

       bool traverse_left = (overlap_left && !child_left->isLeaf());
@@ -113,15 +110,16 @@ struct TreeTraversal<BVH, Predicates, Callback, SpatialPredicateTag>

       if (!traverse_left && !traverse_right)
       {
-        node = *--stack_ptr;
+        node = stack.top();
+        stack.pop();
       }
       else
       {
         node = traverse_left ? child_left : child_right;
         if (traverse_left && traverse_right)
-          *stack_ptr++ = child_right;
+          stack.push(child_right);
       }
-    } while (node != NULL);
+    } while (node != nullptr);
   }
 };

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

Performance results are really too good (1d26860 vs 61b8435):

BM_radius_search<ArborX::BVH<Serial>>/100000/100000/10/1/10/1/3/manual_time_median                  -0.1809         -0.1809        134076        109828        134063        109817
BM_radius_search<ArborX::BVH<Serial>>/1000000/1000000/10/1/10/1/3/manual_time_median                -0.1489         -0.1489       1267254       1078554       1267020       1078358
BM_radius_search<ArborX::BVH<Serial>>/10000/10000/10/0/0/0/2/manual_time_median                     -0.2564         -0.2564         85140         63310         85132         63305
BM_radius_search<ArborX::BVH<Serial>>/100000/100000/10/0/0/0/2/manual_time_median                   -0.2569         -0.2569        921487        684783        921384        684704
BM_radius_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/0/0/2/manual_time_median                 -0.2506         -0.2506      10494559       7864592      10491097       7861788
BM_radius_search<ArborX::BVH<Serial>>/10000/10000/10/0/0/1/3/manual_time_median                     -0.2414         -0.2414         25130         19064         25129         19064
BM_radius_search<ArborX::BVH<Serial>>/100000/100000/10/0/0/1/3/manual_time_median                   -0.2401         -0.2401        171554        130370        171536        130356
BM_radius_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/0/1/3/manual_time_median                 -0.2157         -0.2157       1357535       1064721       1357356       1064569
BM_radius_search<ArborX::BVH<Serial>>/10000/10000/10/0/10/0/2/manual_time_median                    -0.2529         -0.2530         86062         64293         86055         64287
BM_radius_search<ArborX::BVH<Serial>>/100000/100000/10/0/10/0/2/manual_time_median                  -0.2541         -0.2541        930566        694080        930455        693997
BM_radius_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/10/0/2/manual_time_median                -0.2469         -0.2469      10600868       7983793      10597418       7980969
BM_radius_search<ArborX::BVH<Serial>>/10000/10000/10/0/10/1/3/manual_time_median                    -0.2304         -0.2304         25405         19551         25404         19551
BM_radius_search<ArborX::BVH<Serial>>/100000/100000/10/0/10/1/3/manual_time_median                  -0.2311         -0.2311        174099        133869        174082        133856
BM_radius_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/10/1/3/manual_time_median                -0.2063         -0.2063       1381368       1096442       1381154       1096231
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/0/0/2/manual_time_median                     -0.2119         -0.2118          2476          1951          2478          1953
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/0/0/2/manual_time_median                   -0.2514         -0.2429         22774         17049         21825         16523
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/0/0/2/manual_time_median                 -0.2561         -0.2535        227762        169434        224279        167434
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/0/1/3/manual_time_median                     -0.2136         -0.0581          1480          1164           993           936
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/0/1/3/manual_time_median                   -0.2170         -0.1127          9245          7239          3491          3098
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/0/1/3/manual_time_median                 -0.1848         -0.0828         77408         63102         31226         28640
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/10/0/2/manual_time_median                    -0.2039         -0.2037          2547          2028          2549          2030
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/10/0/2/manual_time_median                  -0.2463         -0.2387         23132         17435         22133         16851
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/10/0/2/manual_time_median                -0.2491         -0.2453        233287        175184        229636        173311
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/10/1/3/manual_time_median                    -0.1992         -0.0517          1538          1232          1025           972
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/10/1/3/manual_time_median                  -0.2092         -0.1100          9441          7465          3551          3160
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/10/1/3/manual_time_median                -0.1793         -0.0857         80079         65723         32656         29858
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/0/0/2/manual_time_median                     -0.2081         -0.2079          2189          1734          2191          1736
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/0/0/2/manual_time_median                   -0.2336         -0.2336         22492         17238         22491         17238
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/0/0/2/manual_time_median                 -0.1885         -0.1914        295312        239644        295023        238564
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/0/1/3/manual_time_median                     -0.1850         -0.1846           804           655           806           657
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/0/1/3/manual_time_median                   -0.2260         -0.2250          4567          3534          4563          3537
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/0/1/3/manual_time_median                 -0.2156         -0.2142         34084         26735         33562         26372
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/10/0/2/manual_time_median                    -0.2220         -0.2218          2271          1767          2273          1769
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/10/0/2/manual_time_median                  -0.2525         -0.2521         23045         17226         23034         17227
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/10/0/2/manual_time_median                -0.2040         -0.2036        301712        240164        300333        239196
BM_radius_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/10/1/3/manual_time_median                    -0.1833         -0.1830           851           695           853           697
BM_radius_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/10/1/3/manual_time_median                  -0.2356         -0.2308          4706          3597          4680          3599
BM_radius_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/10/1/3/manual_time_median                -0.2243         -0.2217         35558         27582         34742         27039
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/0/0/2/manual_time_median                       +0.0018         +0.0014          1051          1053          1142          1144
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/0/0/2/manual_time_median                     -0.1785         -0.1652          5640          4633          6119          5108
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/0/0/2/manual_time_median                   -0.4014         -0.3947         54306         32506         55182         33401
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/0/1/3/manual_time_median                       -0.0318         -0.0292          1014           982          1106          1074
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/0/1/3/manual_time_median                     -0.0382         -0.0336          2813          2705          3286          3175
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/0/1/3/manual_time_median                   -0.1039         -0.1029          9635          8634         10483          9404
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/10/0/2/manual_time_median                      +0.0195         +0.0183          1156          1178          1247          1270
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/10/0/2/manual_time_median                    -0.1731         -0.1562          7591          6277          8003          6753
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/10/0/2/manual_time_median                  -0.3690         -0.3640         68423         43173         69271         44056
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/10/1/3/manual_time_median                      -0.0113         -0.0102          1119          1106          1211          1199
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/10/1/3/manual_time_median                    -0.0190         -0.0180          3923          3849          4390          4311
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/10/1/3/manual_time_median                  -0.1207         -0.1133         12080         10622         12925         11460
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/0/0/0/2/manual_time_median                       -0.0154         -0.0126           642           632           732           723
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/0/0/0/2/manual_time_median                     -0.2445         -0.2226          4511          3408          4985          3875
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/0/0/2/manual_time_median                   -0.1776         -0.1760         99909         82167        100780         83047
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/0/0/1/3/manual_time_median                       -0.0729         -0.0640           614           569           706           661
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/0/0/1/3/manual_time_median                     -0.2126         -0.1687          1718          1352          2190          1821
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/0/1/3/manual_time_median                   -0.5712         -0.5342         12563          5387         13394          6239
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/0/10/0/2/manual_time_median                      +0.0013         +0.0018           745           746           835           837
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/0/10/0/2/manual_time_median                    -0.2019         -0.1879          6229          4971          6705          5445
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/10/0/2/manual_time_median                  -0.1461         -0.1463        108927         93011        109810         93742
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/0/10/1/3/manual_time_median                      -0.0393         -0.0351           727           699           820           791
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/0/10/1/3/manual_time_median                    -0.1565         -0.1259          2888          2436          3324          2906
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/10/1/3/manual_time_median                  -0.4657         -0.4552         14781          7897         15597          8497

The hollow mesh radius search for 1M with CUDA is 57% faster!

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

Can you confirm that this is what you tried?

I can't find the exact patch now, but from my memory yes, that is what I tried.

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

Blocking until we can figure out that we cannot achieve the same performance with a Stack<Node const *>

I disagree with this. We should instead merge and then open an issue to clean it up. This way, users of ArborX can achieve these improvements immediately, without placing a burden on us to spend time on this now.

Also, the changes to the unit tests are not the right fix because they remain sensitive to the way we implement the search.

The changes are the correct fix. However, enhancing the tests, as you propose, should also be done, thought not necessarily as a part of this PR.

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

Confirmed that it slows things down with the proposed patch (ran on my workstation, Pascal61 arch):

$ for i in 10000 100000 1000000; do echo "==="; for j in old new; do ./ArborX_$j --values=$i --queries=$i --benchmark_filter=radius.*Cuda --benchmark_repetitions=10 --no-header 2>/dev/null | grep median; echo "---"; done ; done
===
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/0/0/0/manual_time_median       1035 us         1135 us           10
---
BM_radius_search<ArborX::BVH<Cuda>>/10000/10000/10/1/0/0/0/manual_time_median       1058 us         1157 us           10
---
===
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/0/0/0/manual_time_median       7094 us         7202 us           10
---
BM_radius_search<ArborX::BVH<Cuda>>/100000/100000/10/1/0/0/0/manual_time_median       8119 us         8229 us           10
---
===
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/0/0/0/manual_time_median      62104 us        63426 us           10
---
BM_radius_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/0/0/0/manual_time_median      70989 us        72320 us           10
---

(how to read: in each === block, first line is this PR, second line is this PR with the patch proposed in the previous comment)

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

retest this please

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

I also remember looking through the Stack and StaticVector and trying to add a pop call that also returns a value. That did not help either. I think the main difference is extra pointer chasing.

@aprokop
Copy link
Contributor Author

aprokop commented May 18, 2020

Tested HACC example with this patch, and it's about 20% faster.

@aprokop
Copy link
Contributor Author

aprokop commented May 19, 2020

Out of curiosity, I also updated the knn algorithm to follow the same idea as radius, and it produced similar results (dramatically improving Cuda, just minor improvement to host backends)

BM_knn_search<ArborX::BVH<Serial>>/10000/10000/10/1/0/2/manual_time_median                    -0.0663         -0.0666         54327         50722         54322         50702
BM_knn_search<ArborX::BVH<Serial>>/100000/100000/10/1/0/2/manual_time_median                  -0.0612         -0.0610        566880        532189        566682        532129
BM_knn_search<ArborX::BVH<Serial>>/1000000/1000000/10/1/0/2/manual_time_median                -0.0596         -0.0596       6029418       5669810       6028907       5669315
BM_knn_search<ArborX::BVH<Serial>>/10000/10000/10/1/1/3/manual_time_median                    -0.0710         -0.0710         53969         50137         53966         50134
BM_knn_search<ArborX::BVH<Serial>>/100000/100000/10/1/1/3/manual_time_median                  -0.0772         -0.0772        730431        674011        730349        673932
BM_knn_search<ArborX::BVH<Serial>>/1000000/1000000/10/1/1/3/manual_time_median                -0.0795         -0.0795      10180027       9370534      10179119       9369848
BM_knn_search<ArborX::BVH<Serial>>/10000/10000/10/0/0/2/manual_time_median                    -0.0640         -0.0640         55763         52193         55758         52189
BM_knn_search<ArborX::BVH<Serial>>/100000/100000/10/0/0/2/manual_time_median                  -0.0660         -0.0659        599138        559618        599067        559561
BM_knn_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/0/2/manual_time_median                -0.0639         -0.0639       6740405       6309719       6738247       6307696
BM_knn_search<ArborX::BVH<Serial>>/10000/10000/10/0/1/3/manual_time_median                    -0.0680         -0.0680         60932         56788         60927         56783
BM_knn_search<ArborX::BVH<Serial>>/100000/100000/10/0/1/3/manual_time_median                  -0.0727         -0.0727        861348        798730        861240        798631
BM_knn_search<ArborX::BVH<Serial>>/1000000/1000000/10/0/1/3/manual_time_median                -0.0723         -0.0724      12404885      11507511      12401211      11503907
BM_knn_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/0/2/manual_time_median                    +0.0004         +0.0002          1812          1813          1814          1815
BM_knn_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/0/2/manual_time_median                  -0.0398         -0.0388         15469         14853         15086         14500
BM_knn_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/0/2/manual_time_median                -0.0424         -0.0421        158063        151365        156455        149876
BM_knn_search<ArborX::BVH<OpenMP>>/10000/10000/10/1/1/3/manual_time_median                    -0.0179         -0.0179          2226          2187          2228          2189
BM_knn_search<ArborX::BVH<OpenMP>>/100000/100000/10/1/1/3/manual_time_median                  -0.0562         -0.0560         26993         25477         25014         23612
BM_knn_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/1/1/3/manual_time_median                -0.0606         -0.0611        403118        378700        341701        320819
BM_knn_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/0/2/manual_time_median                    -0.0136         -0.0138          1567          1546          1569          1548
BM_knn_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/0/2/manual_time_median                  -0.0470         -0.0469         15103         14392         14421         13745
BM_knn_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/0/2/manual_time_median                -0.0424         -0.0417        202123        193559        191096        183121
BM_knn_search<ArborX::BVH<OpenMP>>/10000/10000/10/0/1/3/manual_time_median                    -0.0145         -0.0145          1699          1675          1702          1677
BM_knn_search<ArborX::BVH<OpenMP>>/100000/100000/10/0/1/3/manual_time_median                  -0.0465         -0.0466         21312         20321         21306         20312
BM_knn_search<ArborX::BVH<OpenMP>>/1000000/1000000/10/0/1/3/manual_time_median                -0.0445         -0.0447        331383        316648        329184        314462
BM_knn_search<ArborX::BVH<Cuda>>/10000/10000/10/1/0/2/manual_time_median                      -0.0174         -0.0169          1650          1621          1743          1714
BM_knn_search<ArborX::BVH<Cuda>>/100000/100000/10/1/0/2/manual_time_median                    -0.2539         -0.2433         10055          7502         10518          7959
BM_knn_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/0/2/manual_time_median                  -0.3171         -0.3131         77497         52925         78361         53824
BM_knn_search<ArborX::BVH<Cuda>>/10000/10000/10/1/1/3/manual_time_median                      -0.0186         -0.0180          1690          1658          1781          1749
BM_knn_search<ArborX::BVH<Cuda>>/100000/100000/10/1/1/3/manual_time_median                    -0.2251         -0.2212         12451          9648         12863         10017
BM_knn_search<ArborX::BVH<Cuda>>/1000000/1000000/10/1/1/3/manual_time_median                  -0.2394         -0.2382        141450        107582        142337        108428
BM_knn_search<ArborX::BVH<Cuda>>/10000/10000/10/0/0/2/manual_time_median                      -0.0111         -0.0092          1147          1134          1238          1227
BM_knn_search<ArborX::BVH<Cuda>>/100000/100000/10/0/0/2/manual_time_median                    -0.3659         -0.3473          9203          5836          9632          6287
BM_knn_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/0/2/manual_time_median                  -0.3203         -0.3173        103264         70191        104132         71095
BM_knn_search<ArborX::BVH<Cuda>>/10000/10000/10/0/1/3/manual_time_median                      -0.0281         -0.0260          1213          1179          1303          1269
BM_knn_search<ArborX::BVH<Cuda>>/100000/100000/10/0/1/3/manual_time_median                    -0.3960         -0.3861         18614         11242         19078         11713
BM_knn_search<ArborX::BVH<Cuda>>/1000000/1000000/10/0/1/3/manual_time_median                  -0.4495         -0.4485        309539        170402        310414        171200

I also wonder about Heap implementation now.

@aprokop aprokop changed the title Restore Karras pristine algorithm Workaround for Stack performance May 19, 2020
@aprokop
Copy link
Contributor Author

aprokop commented May 19, 2020

For the record, @dalg24 tried the following Stack implementation:

struct MyStack {
  Node const *data_[64];
  Node const **ptr_ = data;
  KOKKOS_FORCEINLINE_FUNCTION Node const *pop() noexcept { return *--ptr_; }
  KOKKOS_FORCEINLINE_FUNCTION void push(Node const *p) noexcept { *ptr_++ = p; }
};

and it still exhibits pathological behavior.

Copy link
Contributor

@dalg24 dalg24 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Squash caae585 into 61b8435 and move your changes to the unit test into a separate commit

I can do it if you like. Let me know.

@aprokop
Copy link
Contributor Author

aprokop commented May 20, 2020

@dalg24 Done.

// immediately popped out of the stack and processed.
stack.emplace(bvh_.getRoot(), 0.);
Node const *stack_node[64];
float stack_dist[64];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you try

Kokkos::pair<Node const *, float> stack[64];

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. It complained about not having the default constructor, or something like that.

@aprokop
Copy link
Contributor Author

aprokop commented May 20, 2020

Removed knn from this PR to facilitate faster merging.

@dalg24 dalg24 merged commit c3893a6 into arborx:master May 20, 2020
@aprokop aprokop deleted the karras branch May 20, 2020 21:05
@aprokop aprokop mentioned this pull request Oct 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Something is slower than it should be
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants