Adding a map to hold node edges and fbs

This commit is contained in:
Noah L. Schrick 2022-02-16 02:20:50 -06:00
parent e4aeb144f0
commit 44742e7aa5
3 changed files with 9128 additions and 9124 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1432,19 +1432,21 @@ int initQSize, double mem_threshold, mpi::communicator &world, int state_limit)
if (world.rank() == 0){ if (world.rank() == 0){
std::map<int, int> deque_marker; std::map<int, int> deque_marker;
int finish_count = 0; int finish_count = 0;
std::vector<Factbase> node_factbases; std::map<int, std::vector<Factbase>> node_factbases;
std::vector<Edge> node_edges; std::map<int, std::vector<Edge>> node_edges;
//Receive states and edges when nodes finish //Receive states and edges when nodes finish
while(finish_count != msg_sends){ while(finish_count != msg_sends){
while(world.iprobe(mpi::any_source, 10) || world.iprobe(mpi::any_source, 11)){ while(world.iprobe(mpi::any_source, 10) || world.iprobe(mpi::any_source, 11)){
if(world.iprobe(mpi::any_source, 10)){ for(int w = 0; w < world.size(); w++){
world.recv(mpi::any_source, 10, node_factbases); if(world.iprobe(w, 10)){
} world.recv(w, 10, node_factbases[w]);
if(world.iprobe(mpi::any_source, 11)){ }
world.recv(mpi::any_source, 11, node_edges); if(world.iprobe(w, 11)){
} world.recv(w, 11, node_edges[w]);
if(!node_factbases.empty() || !node_edges.empty()){ }
state_merge(node_factbases, node_edges, hash_map, instance, mem_threshold, world); if(!node_factbases[w].empty() || !node_edges.empty()){
state_merge(node_factbases[w], node_edges[w], hash_map, instance, mem_threshold, world);
}
} }
} }
@ -1487,14 +1489,16 @@ int initQSize, double mem_threshold, mpi::communicator &world, int state_limit)
//Check for factbases or nodes, and add them to our network //Check for factbases or nodes, and add them to our network
while(world.iprobe(mpi::any_source, 10) || world.iprobe(mpi::any_source, 11)){ while(world.iprobe(mpi::any_source, 10) || world.iprobe(mpi::any_source, 11)){
if(world.iprobe(mpi::any_source, 10)){ for(int w = 0; w < world.size(); w++){
world.recv(mpi::any_source, 10, node_factbases); if(world.iprobe(w, 10)){
} world.recv(w, 10, node_factbases[w]);
if(world.iprobe(mpi::any_source, 11)){ }
world.recv(mpi::any_source, 11, node_edges); if(world.iprobe(w, 11)){
} world.recv(w, 11, node_edges[w]);
if(!node_factbases.empty() || !node_edges.empty()){ }
state_merge(node_factbases, node_edges, hash_map, instance, mem_threshold, world); if(!node_factbases[w].empty() || !node_edges.empty()){
state_merge(node_factbases[w], node_edges[w], hash_map, instance, mem_threshold, world);
}
} }
} }
@ -1514,7 +1518,7 @@ int initQSize, double mem_threshold, mpi::communicator &world, int state_limit)
//Maintain a list of explored states //Maintain a list of explored states
for (Factbase fb : node_factbases){ for (Factbase fb : node_factbases[w]){
auto fb_hash = fb.hash(instance.facts); auto fb_hash = fb.hash(instance.facts);
//Incorrectly declare that we've explored all states in our factbase vector //Incorrectly declare that we've explored all states in our factbase vector
tmp_expl.insert(fb_hash); tmp_expl.insert(fb_hash);