2323#include " Registration.hpp"
2424
2525#include < tbb/blocked_range.h>
26+ #include < tbb/concurrent_vector.h>
2627#include < tbb/global_control.h>
2728#include < tbb/info.h>
29+ #include < tbb/parallel_for.h>
2830#include < tbb/parallel_reduce.h>
2931#include < tbb/task_arena.h>
3032
3739#include < tuple>
3840
3941using LinearSystem = std::pair<Eigen::Matrix2d, Eigen::Vector2d>;
40- using Correspondences = std::vector <std::pair<Eigen::Vector3d, Eigen::Vector3d>>;
42+ using Correspondences = tbb::concurrent_vector <std::pair<Eigen::Vector3d, Eigen::Vector3d>>;
4143
4244namespace {
4345constexpr double epsilon = std::numeric_limits<double >::min();
@@ -61,33 +63,20 @@ Correspondences DataAssociation(const std::vector<Eigen::Vector3d> &points,
6163 const Sophus::SE3d &T,
6264 const double max_correspondance_distance) {
6365 using points_iterator = std::vector<Eigen::Vector3d>::const_iterator;
64- Correspondences associations ;
65- associations .reserve (points.size ());
66- associations = tbb::parallel_reduce (
66+ Correspondences correspondences ;
67+ correspondences .reserve (points.size ());
68+ tbb::parallel_for (
6769 // Range
6870 tbb::blocked_range<points_iterator>{points.cbegin (), points.cend ()},
69- // Identity
70- associations,
71- // 1st lambda: Parallel computation
72- [&](const tbb::blocked_range<points_iterator> &r, Correspondences res) -> Correspondences {
73- res.reserve (r.size ());
71+ [&](const tbb::blocked_range<points_iterator> &r) {
7472 std::for_each (r.begin (), r.end (), [&](const auto &point) {
7573 const auto &[closest_neighbor, distance] = voxel_map.GetClosestNeighbor (T * point);
7674 if (distance < max_correspondance_distance) {
77- res .emplace_back (point, closest_neighbor);
75+ correspondences .emplace_back (point, closest_neighbor);
7876 }
7977 });
80- return res;
81- },
82- // 2nd lambda: Parallel reduction
83- [](Correspondences a, const Correspondences &b) -> Correspondences {
84- a.insert (a.end (), //
85- std::make_move_iterator (b.cbegin ()), //
86- std::make_move_iterator (b.cend ()));
87- return a;
8878 });
89-
90- return associations;
79+ return correspondences;
9180}
9281
9382Eigen::Vector2d ComputePerturbation (const Correspondences &correspondences,
0 commit comments