summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2022-03-30 19:20:01 +0200
committerMarc Glisse <marc.glisse@inria.fr>2022-03-30 19:20:01 +0200
commite495c4de49a9a226359fbf21966f4ebc4b3fc31b (patch)
tree78f03017266ce4e00399e978a5ac7e4edfea1e20
parentcae86668b4d8e9702a9758d71cfad5d4c943cb07 (diff)
Reintroduce parallel_sort
-rw-r--r--src/Collapse/include/gudhi/Flag_complex_edge_collapser.h10
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();