[graph][parallel] Problem distributed property map synchronization
Hello,
I need help. I have a distributed graph with a distributed property map for
an edge value.
The problem is that the synchronize procedure does not synchronize my ghost
edges values.
I have a loop that reads from the property, synchronizes, modifies its value
and synchronizes it.
What I see is that the value is not being synchronized for the ghost edges.
for (int t = 0; t < 2; t++) {
myfile<
On Mar 8, 2013, at 10:27 AM, bminano wrote:
Hello,
I need help. I have a distributed graph with a distributed property map for an edge value. The problem is that the synchronize procedure does not synchronize my ghost edges values.
I have a loop that reads from the property, synchronizes, modifies its value and synchronizes it. What I see is that the value is not being synchronized for the ghost edges.
for (int t = 0; t < 2; t++) { myfile<
BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei_i,edge_end_i) = in_edges(v, g); ei_i != edge_end_i; ++ei_i) { remote_key_e k(rank, *ei_i); myfile<<"value "<<d_index[source(*ei_i, g)]<<" -> "<
synchronize(d_ecash); BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei,edge_end) = out_edges(v, g); ei != edge_end; ++ei) { remote_key_e k(rank, *ei); put(d_ecash, k, t + 1); } } synchronize(d_ecash); }
Could anyone tell me what I am doing wrong? I attach the full code if someone want to look at them.
<nabble_a href="sync.cpp">sync.cpp
Your mail client seems to have mangled your code pretty badly and I don't see an attachment, but the first question would be what graph type are you using? If you're using the undirected graph then there's no support in the PBGL for automatically synchronizing the values between the two local copies of the edge stored at the owner of the source and target vertex respectively. It could be added but would require O(E) additional storage to map from an edge to it's corresponding anti-edge as well as some additional communication to update both copies (the complexity of which would vary depending on the consistency model you wanted to support). Cheers, Nick
Hello Nick,
Oops, I attach it again.
Anyway, I am using an bidirectional adjacency list, because I need to
know the in_edges.
typedef boost::adjacency_list
On Mar 8, 2013, at 10:27 AM, bminano wrote:
Hello,
I need help. I have a distributed graph with a distributed property map for an edge value. The problem is that the synchronize procedure does not synchronize my ghost edges values.
I have a loop that reads from the property, synchronizes, modifies its value and synchronizes it. What I see is that the value is not being synchronized for the ghost edges.
for (int t = 0; t < 2; t++) { myfile<
BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei_i,edge_end_i) = in_edges(v, g); ei_i != edge_end_i; ++ei_i) { remote_key_e k(rank, *ei_i); myfile<<"value "<<d_index[source(*ei_i, g)]<<" -> "<
synchronize(d_ecash); BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei,edge_end) = out_edges(v, g); ei != edge_end; ++ei) { remote_key_e k(rank, *ei); put(d_ecash, k, t + 1); } } synchronize(d_ecash); }
Could anyone tell me what I am doing wrong? I attach the full code if someone want to look at them.
<nabble_a href="sync.cpp">sync.cpp Your mail client seems to have mangled your code pretty badly and I don't see an attachment, but the first question would be what graph type are you using? If you're using the undirected graph then there's no support in the PBGL for automatically synchronizing the values between the two local copies of the edge stored at the owner of the source and target vertex respectively. It could be added but would require O(E) additional storage to map from an edge to it's corresponding anti-edge as well as some additional communication to update both copies (the complexity of which would vary depending on the consistency model you wanted to support).
Cheers, Nick _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Un saludo, Borja Miñano IAC3 - Universitat de les Illes Balears ParcBit - Edifici 17 (Disset); Local D7 Cra. Valldemossa km. 7,4 E-07121 Palma de Mallorca. Balears. Spain. Phone: +34 871 967 434
Note that what I am trying to synchronize is an edge property map. Maybe it is different and I am doing something wrong. Are the edges crossing processors synchronized? For a bidirectional graph it is necessary if one want to use in_edges. El 11/03/13 09:20, Borja Miñano escribió:
Hello Nick,
Oops, I attach it again. Anyway, I am using an bidirectional adjacency list, because I need to know the in_edges. typedef boost::adjacency_list
, bidirectionalS, property , EdgeProperties> Graph; I have been looking in more detail and it seems that before the first synchronize call, when the ghost values are required they are filled correctly, but after then they never synchronize their values again. Reading the documentation I saw that the first time one do get for a ghost cell it is automatically synchronized. But, unfortunately, the following times I try to get the values they don't do the synchronization again.
If using a bidirectional directed graph was a problem (as it seems for undirected ones), is there another way to perform a manual synchronization?
El 08/03/13 19:18, Nick Edmonds escribió:
On Mar 8, 2013, at 10:27 AM, bminano wrote:
Hello,
I need help. I have a distributed graph with a distributed property map for an edge value. The problem is that the synchronize procedure does not synchronize my ghost edges values.
I have a loop that reads from the property, synchronizes, modifies its value and synchronizes it. What I see is that the value is not being synchronized for the ghost edges.
for (int t = 0; t < 2; t++) { myfile<
BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei_i,edge_end_i) = in_edges(v, g); ei_i != edge_end_i; ++ei_i) { remote_key_e k(rank, *ei_i); myfile<<"value "<<d_index[source(*ei_i, g)]<<" -> "<
synchronize(d_ecash); BGL_FORALL_VERTICES(v, g, Graph) { for (boost::tie(ei,edge_end) = out_edges(v, g); ei != edge_end; ++ei) { remote_key_e k(rank, *ei); put(d_ecash, k, t + 1); } } synchronize(d_ecash); }
Could anyone tell me what I am doing wrong? I attach the full code if someone want to look at them.
<nabble_a href="sync.cpp">sync.cpp Your mail client seems to have mangled your code pretty badly and I don't see an attachment, but the first question would be what graph type are you using? If you're using the undirected graph then there's no support in the PBGL for automatically synchronizing the values between the two local copies of the edge stored at the owner of the source and target vertex respectively. It could be added but would require O(E) additional storage to map from an edge to it's corresponding anti-edge as well as some additional communication to update both copies (the complexity of which would vary depending on the consistency model you wanted to support).
Cheers, Nick _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Un saludo, Borja Miñano IAC3 - Universitat de les Illes Balears ParcBit - Edifici 17 (Disset); Local D7 Cra. Valldemossa km. 7,4 E-07121 Palma de Mallorca. Balears. Spain. Phone: +34 871 967 434
participants (3)
-
bminano
-
Borja Miñano
-
Nick Edmonds