[Graph] Distributed edge insertion
Dear all,
I am finding difficulties in understanding how distributed graphs work.
My graph is simple, a string-valued property, with some edges, however,
right now I have only one edge... if it works.
Since each process will add its own nodes, is it possible to avoid
communication when adding nodes, given that each node owns its own
vertices, and no overlap is possible between processes? This would save
some communication avoiding re-distribution of nodes.
Can I add edges concurrently? Meaning, each process adds some edges.
I've only seen examples with root adding edges, but that's limiting.
My last question is maybe easy. I'm adding an edge that connects two
nodes, owned by different processes. Doing this results in a crash. It
seems I cannot access properties with operator[] when traversing processes.
I'm posting the code below, along with the *crashing* output.
I hope you can help getting a grasp on PBGL!
Thanks!
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <list>
#include <functional>
#include
NUM VERTICES 10 NUM EDGES 0 V @ 1 109 local 9 owner 1 NUM VERTICES 10 NUM EDGES 0 rank 1 adding edge owners 0 - 1 rank 0 adding edge owners 1 - 0 Assertion failed: (v.owner == processor()), function operator[], file /usr/local/include/boost/graph/distributed/adjacency_list.hpp, line 1696. Assertion failed: (v.owner == processor()), function operator[], file /usr/local/include/boost/graph/distributed/adjacency_list.hpp, line 1696. E @ 0 201 -> E @ 1 101 -> [Senseis-MBP:40908] *** Process received signal *** [Senseis-MBP:40908] Signal: Abort trap: 6 (6)
On 8/24/15 8:13pm, Sensei wrote:
Dear all,
I am finding difficulties in understanding how distributed graphs work. My graph is simple, a string-valued property, with some edges, however, right now I have only one edge... if it works.
Since each process will add its own nodes, is it possible to avoid communication when adding nodes, given that each node owns its own vertices, and no overlap is possible between processes? This would save some communication avoiding re-distribution of nodes.
Can I add edges concurrently? Meaning, each process adds some edges. I've only seen examples with root adding edges, but that's limiting.
My last question is maybe easy. I'm adding an edge that connects two nodes, owned by different processes. Doing this results in a crash. It seems I cannot access properties with operator[] when traversing processes.
This issue seems to be solved by avoiding operator[], and using a
property map:
property_map
participants (1)
-
Sensei