@@ -20,14 +20,12 @@ print_help()
2020}
2121
2222static void
23- BM_OrganizedNeighborSearch (benchmark::State& state,
24- const pcl::PointCloud<pcl::PointXYZ>::Ptr cloudIn,
25- const double searchRadius,
26- const size_t neighborLimit)
23+ BM_RadiusSearch (benchmark::State& state,
24+ const pcl::search::Search<pcl::PointXYZ>& search,
25+ const pcl::PointCloud<pcl::PointXYZ>::Ptr cloudIn,
26+ const double searchRadius,
27+ const size_t neighborLimit)
2728{
28- pcl::search::OrganizedNeighbor<pcl::PointXYZ> organizedNeighborSearch;
29- organizedNeighborSearch.setInputCloud (cloudIn);
30-
3129 int radiusSearchIdx = 0 ;
3230
3331 pcl::Indices k_indices;
@@ -39,36 +37,11 @@ BM_OrganizedNeighborSearch(benchmark::State& state,
3937 searchIdx = radiusSearchIdx++ % cloudIn->size ();
4038 }
4139 state.ResumeTiming ();
42- organizedNeighborSearch .radiusSearch (
40+ search .radiusSearch (
4341 (*cloudIn)[searchIdx], searchRadius, k_indices, k_sqr_distances, neighborLimit);
4442 }
4543}
4644
47- static void
48- BM_KdTree (benchmark::State& state,
49- const pcl::PointCloud<pcl::PointXYZ>::Ptr cloudIn,
50- const double searchRadius,
51- const size_t neighborLimit)
52- {
53- pcl::search::KdTree<pcl::PointXYZ> kdtree (false );
54- kdtree.setInputCloud (cloudIn);
55-
56- int radiusSearchIdx = 0 ;
57-
58- pcl::Indices k_indices;
59- std::vector<float > k_sqr_distances;
60- for (auto _ : state) {
61- state.PauseTiming ();
62- int searchIdx = radiusSearchIdx++ % cloudIn->size ();
63- while (!pcl::isFinite ((*cloudIn)[searchIdx])) {
64- searchIdx = radiusSearchIdx++ % cloudIn->size ();
65- }
66- state.ResumeTiming ();
67- kdtree.radiusSearch (
68- searchIdx, searchRadius, k_indices, k_sqr_distances, neighborLimit);
69- }
70- }
71-
7245static void
7346BM_KdTreeAll (benchmark::State& state,
7447 const pcl::PointCloud<pcl::PointXYZ>::Ptr cloudIn,
@@ -94,33 +67,6 @@ BM_KdTreeAll(benchmark::State& state,
9467 state.SetItemsProcessed (cloudIn->size ());
9568}
9669
97- #if PCL_HAS_NANOFLANN
98- static void
99- BM_KdTreeNanoflann (benchmark::State& state,
100- const pcl::PointCloud<pcl::PointXYZ>::Ptr cloudIn,
101- const double searchRadius,
102- const size_t neighborLimit)
103- {
104- pcl::search::KdTreeNanoflann<pcl::PointXYZ> kdtree;
105- kdtree.setInputCloud (cloudIn);
106-
107- int radiusSearchIdx = 0 ;
108-
109- pcl::Indices k_indices;
110- std::vector<float > k_sqr_distances;
111- for (auto _ : state) {
112- state.PauseTiming ();
113- int searchIdx = radiusSearchIdx++ % cloudIn->size ();
114- while (!pcl::isFinite ((*cloudIn)[searchIdx])) {
115- searchIdx = radiusSearchIdx++ % cloudIn->size ();
116- }
117- state.ResumeTiming ();
118- kdtree.radiusSearch (
119- searchIdx, searchRadius, k_indices, k_sqr_distances, neighborLimit);
120- }
121- }
122- #endif
123-
12470int
12571main (int argc, char ** argv)
12672{
@@ -160,25 +106,40 @@ main(int argc, char** argv)
160106 }
161107 }
162108
109+ pcl::search::OrganizedNeighbor<pcl::PointXYZ> organized_neighbor;
110+ organized_neighbor.setInputCloud (cloudIn);
163111 benchmark::RegisterBenchmark (" OrganizedNeighborSearch" ,
164- &BM_OrganizedNeighborSearch,
112+ &BM_RadiusSearch,
113+ organized_neighbor,
165114 cloudIn,
166115 searchRadius,
167116 neighborLimit)
168117 ->Unit (benchmark::kMicrosecond );
118+
119+ pcl::search::KdTree<pcl::PointXYZ> kdtree (false );
120+ kdtree.setInputCloud (cloudIn);
169121 benchmark::RegisterBenchmark (
170- " KdTree" , &BM_KdTree , cloudIn, searchRadius, neighborLimit)
122+ " KdTree" , &BM_RadiusSearch, kdtree , cloudIn, searchRadius, neighborLimit)
171123 ->Unit (benchmark::kMicrosecond );
124+
172125 benchmark::RegisterBenchmark (
173126 " KdTreeAll" , &BM_KdTreeAll, cloudFiltered, searchRadius, neighborLimit)
174127 ->Unit (benchmark::kMicrosecond )
175128 ->UseManualTime ()
176129 ->Iterations (1 );
130+
177131#if PCL_HAS_NANOFLANN
178- benchmark::RegisterBenchmark (
179- " KdTreeNanoflann" , &BM_KdTreeNanoflann, cloudIn, searchRadius, neighborLimit)
132+ pcl::search::KdTreeNanoflann<pcl::PointXYZ> kdtreeNanoflann;
133+ kdtreeNanoflann.setInputCloud (cloudIn);
134+ benchmark::RegisterBenchmark (" KdTreeNanoflann" ,
135+ &BM_RadiusSearch,
136+ kdtreeNanoflann,
137+ cloudIn,
138+ searchRadius,
139+ neighborLimit)
180140 ->Unit (benchmark::kMicrosecond );
181141#endif
142+
182143 benchmark::Initialize (&argc, argv);
183144 benchmark::RunSpecifiedBenchmarks ();
184145}
0 commit comments