A master recv messages from all slaves and answers.
#include <iostream>
#include <vector>
#include <array>
#include <functional>
#include <graybat/Cage.hpp>
#include <graybat/communicationPolicy/BMPI.hpp>
#include <graybat/graphPolicy/BGL.hpp>
#include <graybat/mapping/Consecutive.hpp>
#include <graybat/mapping/Random.hpp>
#include <graybat/mapping/Roundrobin.hpp>
#include <graybat/pattern/GridDiagonal.hpp>
#include <graybat/pattern/Chain.hpp>
#include <graybat/pattern/BiStar.hpp>
void process(std::array<unsigned, 1> &data){
foo(std::get<0>(data));
}
std::function<void (unsigned&)> foo;
};
int exp() {
typedef CP::Config Config;
typedef typename Cage::Vertex Vertex;
typedef typename Cage::Edge Edge;
Config config;
Cage cage(config);
std::array<unsigned, 1> input {{0}};
std::array<unsigned, 1> output {{0}};
const Vertex reply = cage.getVertex(0);
for(Vertex v : cage.hostedVertices){
if(v == reply){
while(true){
Edge e = cage.recv(output);
std::cout << "Got msg from " << e.source.id << ": "<< output[0] << std::endl;
output[0]++;
cage.send(e.inverse(), output);
}
}
else {
input[0] = v.id;
v.spread(input);
v.collect(input);
std::cout << " Got input from master:" << input[0] << std::endl;
}
}
return 0;
}
int main(){
exp();
return 0;
}