[pgrouting-dev] Fixes for Bidirectional code just checked in

Alec Gosse alec at thegosses.com
Wed Jun 5 07:13:33 PDT 2013


It would seem that it was simply running out of memory due to giant default vector resize requests. Adding 
m_vecEdgeVector.reserve(edge_count);
before the loop calling addEdge(..) in the construct_graph function seems to do the trick. Probably best to do m_vecNodeVector.reserve(maxNode) as well, just for good measure;

I recall seeing something similar to this discussed, but perhaps it was somewhere else in the code.

Alec




On Jun 4, 2013, at 4:34 PM, Stephen Woodbridge <woodbri at swoodbridge.com> wrote:

> On 6/4/2013 3:53 PM, Alec Gosse wrote:
>> Hello,
>> 
>> I've just pulled from the develop branch and built fresh and I'm
>> getting a server crash from pgr_bdastar. If I run exactly the same
>> thing using pgr_astar, it works. This is using postgres 9.2.4 and
>> postgis 2.0.3 from Homebrew on Mac 10.8.3
> 
> I'm using pg9.2.4 and postgis 2.0.x or 2.1.0beta3dev and I fixed these issues I thought. Evidently not.
> 
>> I'm still working on a bulk routing function using bdastar, but just
>> realized that the regular version was crashing without my
>> modifications. I'm happy to try to track this down, but have little
>> knowledge of how to debug within postgresql. Any pointers would be
>> appreciated.
> 
> OK, start by uncommenting #define DEBUG 1 in both the C and C++ code. Then add more DBG('I got here message\n"). In the C++ code these messages get written to a file '/tmp/sew-debug' and you can do a tail -f on that in another window to see your progress.
> 
> This is likely a issue in the C++ code but it may also be something systemic about the way we are integrating code. If you build your own postgresql you might want to rebuild it with --enable-cassert option to configure which will put the database backend into a more rigorous memory check mode.
> 
> That is a start, I would be appy to help more if I can.
> 
> Thanks,
>  -Steve
> 
>> Best, Alec
>> 
>> 
>> 
>> 
>> On Jun 1, 2013, at 2:13 PM, Stephen Woodbridge
>> <woodbri at swoodbridge.com> wrote:
>> 
>>> Hi all,
>>> 
>>> I think I have just submitted changes to the bidirectional dijkstra
>>> and astar routines the resolve the server crashes we were seeing.
>>> This closes on major outstanding bug against 2.0.
>>> 
>>> Razequl,
>>> 
>>> I made two simple changes to your code BiDirDijkstra.cpp and the
>>> astar version:
>>> 
>>> 1. in BiDirDijkstra::initall I add: m_vecNodeVector.reserve(maxNode
>>> + 1);
>>> 
>>> 2. in BiDirDijkstra::bidir_dijkstra I move the call to
>>> initall(maxNode); to before construct_graph(edges, edge_count,
>>> maxNode);
>>> 
>>> This does two major things:
>>> 
>>> 1. std::vector doubles the size of the array every time it needs to
>>> increase its size and then needs to copy the old data to the new
>>> area.
>>> 
>>> 2. reserve() pre allocates all the memory we need once, which avoid
>>> realloc memory fragmentation and avoids the copy each time it
>>> reallocs so this improves performance.
>>> 
>>> Anytime you know how much space you are going to need you should
>>> reserve it up front.
>>> 
>>> So things look good for now.
>>> 
>>> Thanks, -Steve _______________________________________________
>>> pgrouting-dev mailing list pgrouting-dev at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>> 
>> _______________________________________________ pgrouting-dev mailing
>> list pgrouting-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>> 
> 
> _______________________________________________
> pgrouting-dev mailing list
> pgrouting-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev



More information about the pgrouting-dev mailing list