diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2022-03-30 19:20:01 +0200 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2022-03-30 19:20:01 +0200 |
commit | e495c4de49a9a226359fbf21966f4ebc4b3fc31b (patch) | |
tree | 78f03017266ce4e00399e978a5ac7e4edfea1e20 /src/Collapse/include/gudhi/Flag_complex_edge_collapser.h | |
parent | cae86668b4d8e9702a9758d71cfad5d4c943cb07 (diff) |
Reintroduce parallel_sort
Diffstat (limited to 'src/Collapse/include/gudhi/Flag_complex_edge_collapser.h')
-rw-r--r-- | src/Collapse/include/gudhi/Flag_complex_edge_collapser.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h index 78057e62..c823901f 100644 --- a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h +++ b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h @@ -18,6 +18,10 @@ #include <boost/container/flat_map.hpp> #include <boost/container/flat_set.hpp> +#ifdef GUDHI_USE_TBB +#include <tbb/parallel_sort.h> +#endif + #include <utility> #include <vector> #include <tuple> @@ -290,7 +294,13 @@ auto flag_complex_collapse_edges(FilteredEdgeRange&& edges, Delay&&delay) { using Edge_collapser = Flag_complex_edge_collapser<Vertex, Filtration_value>; if (first_edge_itr != std::end(edges)) { auto edges2 = to_range<std::vector<typename Edge_collapser::Filtered_edge>>(std::forward<FilteredEdgeRange>(edges)); +#ifdef GUDHI_USE_TBB + // I think this sorting is always negligible compared to the collapse, but parallelizing it shouldn't hurt. + tbb::parallel_sort(edges2.begin(), edges2.end(), + [](auto const&a, auto const&b){return std::get<2>(a)>std::get<2>(b);}); +#else std::sort(edges2.begin(), edges2.end(), [](auto const&a, auto const&b){return std::get<2>(a)>std::get<2>(b);}); +#endif Edge_collapser edge_collapser; edge_collapser.process_edges(edges2, std::forward<Delay>(delay)); return edge_collapser.output(); |