@@ -754,7 +754,8 @@ class DistLocalGraph {
754
754
*/
755
755
inline void determineThreadRangesMaster () {
756
756
// make sure this hasn't been called before
757
- assert (masterRanges.size () == 0 );
757
+ if (masterRanges.size () != 0 )
758
+ masterRanges.clear ();
758
759
759
760
// first check if we even need to do any work; if already calculated,
760
761
// use already calculated vector
@@ -780,7 +781,8 @@ class DistLocalGraph {
780
781
*/
781
782
inline void determineThreadRangesWithEdges () {
782
783
// make sure not called before
783
- assert (withEdgeRanges.size () == 0 );
784
+ if (withEdgeRanges.size () != 0 )
785
+ withEdgeRanges.clear ();
784
786
785
787
// first check if we even need to do any work; if already calculated,
786
788
// use already calculated vector
@@ -802,7 +804,8 @@ class DistLocalGraph {
802
804
* over the graph in different ways.
803
805
*/
804
806
void initializeSpecificRanges () {
805
- assert (specificRanges.size () == 0 );
807
+ if (specificRanges.size () != 0 )
808
+ specificRanges.clear ();
806
809
807
810
// TODO/FIXME assertion likely not safe if a host gets no nodes
808
811
// make sure the thread ranges have already been calculated
@@ -949,20 +952,27 @@ class DistLocalGraph {
949
952
host, galois::runtime::evilPhase, std::move (b));
950
953
}
951
954
955
+ void updateRanges () {
956
+ determineThreadRanges ();
957
+ determineThreadRangesMaster ();
958
+ determineThreadRangesWithEdges ();
959
+ initializeSpecificRanges ();
960
+ }
961
+
952
962
// Assumptions:
953
963
// 1. A vertex is added before any edges are added to it
954
964
// 2. No support for deleting edges/vertices yet
955
965
// 3. Only works for OEC
956
966
void
957
967
updateVariables (bool isVertex, uint64_t src,
958
- std::optional<std::vector<uint64_t >> dsts = std::nullopt) {
968
+ std::optional<std::vector<uint64_t >> dsts = std::nullopt,
969
+ std::optional<std::vector<NodeTy>> dstData = std::nullopt) {
959
970
960
971
if (isVertex) {
961
972
if (globalToLocalMap.find (src) == globalToLocalMap.end ()) {
962
973
localToGlobalVector.push_back (src);
963
974
globalToLocalMap[src] = localToGlobalVector.size () - 1 ;
964
975
numNodes++;
965
- } else {
966
976
}
967
977
numOwned++;
968
978
} else {
@@ -971,14 +981,24 @@ class DistLocalGraph {
971
981
if (edge_begin (srcLID) == edge_end (srcLID)) {
972
982
numNodesWithEdges++;
973
983
}
984
+ uint32_t i = 0 ;
974
985
for (auto token : dsts.value ()) {
975
986
if (globalToLocalMap.find (token) == globalToLocalMap.end ()) {
976
987
localToGlobalVector.push_back (token);
977
988
globalToLocalMap[token] = localToGlobalVector.size () - 1 ;
978
989
numNodes++;
990
+ numNodesWithEdges++;
991
+ std::vector<NodeTy> data;
992
+ data.push_back (dstData.value ()[i]);
993
+ graph->addVertices (data);
979
994
}
995
+ i++;
980
996
if (!isOwned (token)) {
981
997
mirrorNodes[getHostID (token)].push_back (token);
998
+ } else {
999
+ if (edge_begin (getLID (token)) == edge_end (getLID (token))) {
1000
+ numNodesWithEdges++;
1001
+ }
982
1002
}
983
1003
}
984
1004
numEdges += dsts.value ().size ();
@@ -990,7 +1010,7 @@ class DistLocalGraph {
990
1010
uint64_t belongsTo = getHostID (token);
991
1011
if (belongsTo == id) {
992
1012
updateVariables (true , token);
993
- // graph->addVertexTopologyOnly();
1013
+ graph->addVertexTopologyOnly ();
994
1014
} else {
995
1015
sendModifyRequest (belongsTo, ADD_VERTEX_TOPOLOGY_ONLY, token);
996
1016
}
@@ -1025,18 +1045,17 @@ class DistLocalGraph {
1025
1045
}
1026
1046
1027
1047
void addEdges (uint64_t src, std::vector<uint64_t > dsts,
1028
- std::vector<EdgeTy> data) {
1048
+ std::vector<EdgeTy> data, std::vector<NodeTy> dstData ) {
1029
1049
uint64_t belongsTo = getHostID (src);
1030
1050
if (belongsTo == id) {
1031
- updateVariables (false , src, dsts);
1051
+ updateVariables (false , src, dsts, dstData );
1032
1052
std::vector<uint64_t > lids;
1033
1053
for (uint32_t i = 0 ; i < dsts.size (); i++) {
1034
1054
lids.push_back (getLID (dsts[i]));
1035
1055
}
1036
1056
graph->addEdges (getLID (src), lids, data);
1037
-
1038
1057
} else {
1039
- sendModifyRequest (belongsTo, ADD_EDGES, src, dsts, data);
1058
+ sendModifyRequest (belongsTo, ADD_EDGES, src, dsts, data, dstData );
1040
1059
}
1041
1060
}
1042
1061
0 commit comments