use parallel sorting for DeallocatingVector
This commit is contained in:
parent
480f70c049
commit
a6ab042078
@ -48,6 +48,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <boost/range/irange.hpp>
|
#include <boost/range/irange.hpp>
|
||||||
|
|
||||||
|
#include <tbb/parallel_sort.h>
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <gdal.h>
|
#include <gdal.h>
|
||||||
#include <ogrsf_frmts.h>
|
#include <ogrsf_frmts.h>
|
||||||
@ -177,7 +179,7 @@ class TarjanSCC
|
|||||||
BOOST_ASSERT_MSG(0 == input_edges.size() && 0 == input_edges.capacity(),
|
BOOST_ASSERT_MSG(0 == input_edges.size() && 0 == input_edges.capacity(),
|
||||||
"input edge vector not properly deallocated");
|
"input edge vector not properly deallocated");
|
||||||
|
|
||||||
std::sort(edge_list.begin(), edge_list.end());
|
tbb::parallel_sort(edge_list.begin(), edge_list.end());
|
||||||
m_node_based_graph = std::make_shared<TarjanDynamicGraph>(number_of_nodes, edge_list);
|
m_node_based_graph = std::make_shared<TarjanDynamicGraph>(number_of_nodes, edge_list);
|
||||||
TIMER_STOP(SCC_LOAD);
|
TIMER_STOP(SCC_LOAD);
|
||||||
SimpleLogger().Write() << "Loading data into SCC took " << TIMER_MSEC(SCC_LOAD)/1000. << "s";
|
SimpleLogger().Write() << "Loading data into SCC took " << TIMER_MSEC(SCC_LOAD)/1000. << "s";
|
||||||
|
@ -160,7 +160,6 @@ class Contractor
|
|||||||
temp_edge_counter = 0;
|
temp_edge_counter = 0;
|
||||||
|
|
||||||
const auto dend = input_edge_list.dend();
|
const auto dend = input_edge_list.dend();
|
||||||
|
|
||||||
for (auto diter = input_edge_list.dbegin(); diter != dend; ++diter)
|
for (auto diter = input_edge_list.dbegin(); diter != dend; ++diter)
|
||||||
{
|
{
|
||||||
BOOST_ASSERT_MSG(static_cast<unsigned int>(std::max(diter->weight, 1)) > 0, "edge distance < 1");
|
BOOST_ASSERT_MSG(static_cast<unsigned int>(std::max(diter->weight, 1)) > 0, "edge distance < 1");
|
||||||
|
@ -202,7 +202,7 @@ int Prepare::Process(int argc, char *argv[])
|
|||||||
* Sorting contracted edges in a way that the static query graph can read some in in-place.
|
* Sorting contracted edges in a way that the static query graph can read some in in-place.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::sort(contracted_edge_list.begin(), contracted_edge_list.end());
|
tbb::parallel_sort(contracted_edge_list.begin(), contracted_edge_list.end());
|
||||||
unsigned max_used_node_id = 0;
|
unsigned max_used_node_id = 0;
|
||||||
unsigned contracted_edge_count = contracted_edge_list.size();
|
unsigned contracted_edge_count = contracted_edge_list.size();
|
||||||
SimpleLogger().Write() << "Serializing compacted graph of " << contracted_edge_count
|
SimpleLogger().Write() << "Serializing compacted graph of " << contracted_edge_count
|
||||||
|
@ -60,7 +60,6 @@ inline std::shared_ptr<NodeBasedDynamicGraph>
|
|||||||
NodeBasedDynamicGraphFromImportEdges(int number_of_nodes, std::vector<ImportEdge> &input_edge_list)
|
NodeBasedDynamicGraphFromImportEdges(int number_of_nodes, std::vector<ImportEdge> &input_edge_list)
|
||||||
{
|
{
|
||||||
static_assert(sizeof(NodeBasedEdgeData) == 16, "changing node based edge data size changes memory consumption");
|
static_assert(sizeof(NodeBasedEdgeData) == 16, "changing node based edge data size changes memory consumption");
|
||||||
// tbb::parallel_sort(input_edge_list.begin(), input_edge_list.end());
|
|
||||||
|
|
||||||
DeallocatingVector<NodeBasedDynamicGraph::InputEdge> edges_list;
|
DeallocatingVector<NodeBasedDynamicGraph::InputEdge> edges_list;
|
||||||
NodeBasedDynamicGraph::InputEdge edge;
|
NodeBasedDynamicGraph::InputEdge edge;
|
||||||
@ -107,7 +106,7 @@ NodeBasedDynamicGraphFromImportEdges(int number_of_nodes, std::vector<ImportEdge
|
|||||||
}
|
}
|
||||||
|
|
||||||
// remove duplicate edges
|
// remove duplicate edges
|
||||||
std::sort(edges_list.begin(), edges_list.end());
|
tbb::parallel_sort(edges_list.begin(), edges_list.end());
|
||||||
NodeID edge_count = 0;
|
NodeID edge_count = 0;
|
||||||
for (NodeID i = 0; i < edges_list.size(); )
|
for (NodeID i = 0; i < edges_list.size(); )
|
||||||
{
|
{
|
||||||
@ -194,7 +193,7 @@ SimpleNodeBasedDynamicGraphFromEdges(int number_of_nodes, std::vector<SimpleEdge
|
|||||||
}
|
}
|
||||||
|
|
||||||
// remove duplicate edges
|
// remove duplicate edges
|
||||||
std::sort(edges_list.begin(), edges_list.end());
|
tbb::parallel_sort(edges_list.begin(), edges_list.end());
|
||||||
NodeID edge_count = 0;
|
NodeID edge_count = 0;
|
||||||
for (NodeID i = 0; i < edges_list.size(); )
|
for (NodeID i = 0; i < edges_list.size(); )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user