
Boost : 
Subject: Re: [boost] [BGL] Trying to get a correclty working Parallel BFS code
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 20091027 13:27:31
On Tue, 27 Oct 2009, Sandeep Gupta wrote:
> On Mon, Oct 26, 2009 at 11:29 PM, Jeremiah Willcock <jewillco_at_[hidden]>wrote:
>
>> On Mon, 26 Oct 2009, Sandeep Gupta wrote:
>>
>> Hi All,
>>> I have spent significant effort on parallel bfs. Currently its almost
>>> working. I would really appreciate some help to get it running correctly.
>>> I
>>> have attached the code (self contained and requires no input file).
>>> I think I have followed all the guidelines regarding distributed property
>>> maps mentioned in the docs (
>>>
>>> http://www.osl.iu.edu/research/pbgl/documentation/graph/breadth_first_search.html
>>> ).
>>> I am out of ideas of where things can could have gone wrong.
>>>
>>
>> The graph is distributed by source vertex across all processors, and so you
>> need to add them on every processor (or at least on the processor that owns
>> them, which is probably not processor 0). Thus, your graph is missing
>> whichever edges would be on processor 1, leading to incorrect results. Try
>> adding all of the edges on all processors and see if this fixes your
>> problem.
>>
>>  Jeremiah Willcock
>>
>>
>
> Jeremiah, thanks so much looking into this promptly. I took cues from
> building distributed graph section of distributed adjacency list page which
> has an example:
>
> ///Begin example
>
> Graph g(n); // initialize with the total number of vertices, n
> if (process_id(g.process_group()) == 0) {
> // Only process 0 loads the graph, which is distributed automatically
> int source, target;
> for (std::cin >> source >> target)
> add_edge(vertex(source, g), vertex(target, g), g);
> }
>
> // All processes synchronize at this point, then the graph is complete
> synchronize(g.process_group());
> //End
>
> Looking at this, it seems that distribution happens automatically which is
> what the manual says.
> This is further confirmed when I output the subgraphs at each process.
OK. I was mistaken on this point then. Could you please try the
following graph with a distribution that puts vertices 03 on rank 0 and
4 on rank 1 (just add three dummy vertices on the end and use a block
distribution)?
0 > 1
1 > 2
2 > 3
0 > 4
4 > 3
See if the depths are reasonable for that graph. Also, the contents of
the predecessor maps output by your search (both the original one and the
graph I just gave) would be nice too; that is just an extra map you can
give to BFS and you can just dump it the same way you dump depth values.
 Jeremiah Willcock
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk