First round of changes to have the constractor flush its data structures
at around 75% of the preprocessing. Also, a first try to branches.
This commit is contained in:
		
							parent
							
								
									53aede83dc
								
							
						
					
					
						commit
						a5c5f4c02c
					
				| @ -233,7 +233,66 @@ public: | ||||
|         } | ||||
|         std::cout << "ok" << std::endl << "preprocessing ..." << std::flush; | ||||
| 
 | ||||
|         bool flushedContractor = false; | ||||
|         while ( numberOfContractedNodes < numberOfNodes ) { | ||||
|         	if(!flushedContractor && (numberOfContractedNodes > (numberOfNodes*0.75) ) ){ | ||||
|         		INFO("Flushing memory after " << numberOfContractedNodes << " nodes"); | ||||
|         		//TODO:
 | ||||
| 
 | ||||
|         		//Delete old heap data to free memory that we need for the coming operations
 | ||||
|                 for ( unsigned threadNum = 0; threadNum < maxThreads; threadNum++ ) { | ||||
|                     delete threadData[threadNum]; | ||||
|                 } | ||||
|                 threadData.clear(); | ||||
| 
 | ||||
| 
 | ||||
|         		//Create new priority array
 | ||||
|         		std::vector<double> newNodePriority(remainingNodes.size()); | ||||
|         		//this map gives the old IDs from the new ones, necessary to get a consistent graph at the end of contraction
 | ||||
|         		std::vector<NodeID> oldNodeIDMap(remainingNodes.size()); | ||||
|         		//this map gives the new IDs from the old ones, necessary to remap targets from the remaining graph
 | ||||
|         		std::vector<NodeID> newNodeIDMap(numberOfNodes, UINT_MAX); | ||||
|         		 | ||||
|         		//build forward and backward renumbering map and remap ids in remainingNodes and Priorities.
 | ||||
|         		for(unsigned newNodeID = 0; newNodeID < remainingNodes.size(); ++newNodeID) { | ||||
|         			//create renumbering maps in both directions
 | ||||
|         			oldNodeIDMap[newNodeID] = remainingNodes[newNodeID].first; | ||||
|         			newNodeIDMap[remainingNodes[newNodeID].first] = newNodeID; | ||||
|         			newNodePriority[newNodeID] = nodePriority[remainingNodes[newNodeID].first]; | ||||
|         			remainingNodes[newNodeID].first = newNodeID; | ||||
|         		} | ||||
|         		 | ||||
|         		//create new _DynamicGraph, goes out of scope after the renumbering
 | ||||
|         		boost::shared_ptr<_DynamicGraph> _newGraph ( new _DynamicGraph(remainingNodes.size()) ); | ||||
| 
 | ||||
|         		//walk over all remainingNodes
 | ||||
|         		for(unsigned i = 0; i < remainingNodes.size(); ++i) { | ||||
|         		//TODO:Wenn Knoten kontrahiert: speichern seiner Kanten in vector mit
 | ||||
|         		//TODO:Wenn Knoten nicht kontrahiert: Einfügen der Kanten in neuen DynamicGraph und
 | ||||
|         		//								 dabei Source, Target umnummerieren und Priorität in neuem Prioritäten-Array speichern.
 | ||||
|         		} | ||||
|         		//
 | ||||
|         		//Delete map from old NodeIDs to new ones.
 | ||||
|         		std::vector<NodeID>().swap(newNodeIDMap); | ||||
| 
 | ||||
|         		//Replace old priorities array by new one
 | ||||
|         		nodePriority.swap(newNodePriority); | ||||
|         		//Delete old nodePriority vector
 | ||||
|         		std::vector<double>().swap(newNodePriority); | ||||
|         		//Alten Graphen löschen und neuen Graphen speichern.
 | ||||
| 
 | ||||
|         		//ThreadData mit Heaps passender Größe reinitialisieren.
 | ||||
|                 for ( unsigned threadNum = 0; threadNum < maxThreads; ++threadNum ) { | ||||
|                     threadData.push_back( new _ThreadData( remainingNodes.size() ) ); | ||||
|                 } | ||||
| 
 | ||||
|                 //TODO: Check if old Graph is removed
 | ||||
|                 _graph.swap(_newGraph); | ||||
| 
 | ||||
| //        		numberOfContractedNodes = 0;
 | ||||
|         		flushedContractor = true; | ||||
|         	} | ||||
| 
 | ||||
|             const int last = ( int ) remainingNodes.size(); | ||||
| #pragma omp parallel | ||||
|             { | ||||
| @ -604,6 +663,7 @@ private: | ||||
|     } | ||||
| 
 | ||||
|     boost::shared_ptr<_DynamicGraph> _graph; | ||||
|     std::vector<_DynamicGraph::InputEdge> contractedEdges; | ||||
| }; | ||||
| 
 | ||||
| #endif // CONTRACTOR_H_INCLUDED
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user