Moving temporary storage of edge-expanded graph to external memory

This commit is contained in:
DennisOSRM 2012-04-26 11:19:45 +02:00
parent 3c08b89923
commit bb98bc92ef
3 changed files with 11 additions and 12 deletions

View File

@ -125,12 +125,11 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vector<NodeBasedEdg
std::vector<NodeBasedEdge>().swap(inputEdges); std::vector<NodeBasedEdge>().swap(inputEdges);
std::vector<_NodeBasedEdge>(edges).swap(edges); std::vector<_NodeBasedEdge>(edges).swap(edges);
std::sort( edges.begin(), edges.end() ); std::sort( edges.begin(), edges.end() );
INFO("edges size: " << edges.size() << ", capacity: " << edges.capacity());
_nodeBasedGraph.reset(new _NodeBasedDynamicGraph( nodes, edges )); _nodeBasedGraph.reset(new _NodeBasedDynamicGraph( nodes, edges ));
} }
void EdgeBasedGraphFactory::GetEdgeBasedEdges(std::vector< EdgeBasedEdge >& outputEdgeList ) { void EdgeBasedGraphFactory::GetEdgeBasedEdges(stxxl::vector< EdgeBasedEdge >& outputEdgeList ) {
GUARANTEE(0 == outputEdgeList.size(), "Vector passed to EdgeBasedGraphFactory::GetEdgeBasedEdges(..) is not empty"); GUARANTEE(0 == outputEdgeList.size(), "Vector passed to EdgeBasedGraphFactory::GetEdgeBasedEdges(..) is not empty");
GUARANTEE(0 != edgeBasedEdges.size(), "No edges in edge based graph"); GUARANTEE(0 != edgeBasedEdges.size(), "No edges in edge based graph");

View File

@ -30,7 +30,7 @@
#include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ini_parser.hpp>
#include <vector> #include <vector>
#include <stxxl.h>
#include <cstdlib> #include <cstdlib>
#include "../typedefs.h" #include "../typedefs.h"
@ -103,7 +103,7 @@ private:
RestrictionMap _restrictionMap; RestrictionMap _restrictionMap;
std::vector<EdgeBasedEdge> edgeBasedEdges; stxxl::vector<EdgeBasedEdge> edgeBasedEdges;
std::vector<EdgeBasedNode> edgeBasedNodes; std::vector<EdgeBasedNode> edgeBasedNodes;
std::vector<OriginalEdgeData> originalEdgeData; std::vector<OriginalEdgeData> originalEdgeData;
std::vector<NodeInfo> inputNodeInfoList; std::vector<NodeInfo> inputNodeInfoList;
@ -127,7 +127,7 @@ public:
explicit EdgeBasedGraphFactory(int nodes, std::vector<InputEdgeT> & inputEdges, std::vector<NodeID> & _bollardNodes, std::vector<NodeID> & trafficLights, std::vector<_Restriction> & inputRestrictions, std::vector<NodeInfo> & nI, boost::property_tree::ptree speedProfile, std::string & srtm); explicit EdgeBasedGraphFactory(int nodes, std::vector<InputEdgeT> & inputEdges, std::vector<NodeID> & _bollardNodes, std::vector<NodeID> & trafficLights, std::vector<_Restriction> & inputRestrictions, std::vector<NodeInfo> & nI, boost::property_tree::ptree speedProfile, std::string & srtm);
void Run(); void Run();
void GetEdgeBasedEdges( std::vector< EdgeBasedEdge >& edges ); void GetEdgeBasedEdges( stxxl::vector< EdgeBasedEdge >& edges );
void GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes); void GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes);
void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData); void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData);
short AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const; short AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const;

View File

@ -131,14 +131,14 @@ int main (int argc, char *argv[]) {
std::vector<NodeID>().swap(bollardNodes); std::vector<NodeID>().swap(bollardNodes);
std::vector<NodeID>().swap(trafficLightNodes); std::vector<NodeID>().swap(trafficLightNodes);
NodeID edgeBasedNodeNumber = edgeBasedGraphFactory->GetNumberOfNodes(); NodeID edgeBasedNodeNumber = edgeBasedGraphFactory->GetNumberOfNodes();
std::vector<EdgeBasedEdge> edgeBasedEdgeList; stxxl::vector<EdgeBasedEdge> edgeBasedEdgeList;
edgeBasedGraphFactory->GetEdgeBasedEdges(edgeBasedEdgeList); edgeBasedGraphFactory->GetEdgeBasedEdges(edgeBasedEdgeList);
stxxl::vector<EdgeBasedEdge> externalEdgeBasedEdgeList; // stxxl::vector<EdgeBasedEdge> externalEdgeBasedEdgeList;
BOOST_FOREACH(EdgeBasedEdge & edge, edgeBasedEdgeList) { // BOOST_FOREACH(EdgeBasedEdge & edge, edgeBasedEdgeList) {
externalEdgeBasedEdgeList.push_back(edge); // externalEdgeBasedEdgeList.push_back(edge);
} // }
std::vector<EdgeBasedEdge>().swap(edgeBasedEdgeList); // std::vector<EdgeBasedEdge>().swap(edgeBasedEdgeList);
/*** /***
* Writing info on original (node-based) nodes * Writing info on original (node-based) nodes
@ -186,7 +186,7 @@ int main (int argc, char *argv[]) {
*/ */
INFO("initializing contractor"); INFO("initializing contractor");
Contractor* contractor = new Contractor( edgeBasedNodeNumber, externalEdgeBasedEdgeList ); Contractor* contractor = new Contractor( edgeBasedNodeNumber, edgeBasedEdgeList );
double contractionStartedTimestamp(get_timestamp()); double contractionStartedTimestamp(get_timestamp());
contractor->Run(); contractor->Run();
INFO("Contraction took " << get_timestamp() - contractionStartedTimestamp << " sec"); INFO("Contraction took " << get_timestamp() - contractionStartedTimestamp << " sec");