31 int main(
int argc,
char **argv){
33 MPI_Init(&argc, &argv);
34 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
51 std::string R_libs =
"suppressMessages(library(random));";
57 std::vector<int> data;
64 for(
int i = 0; i< 10; i++){
68 const int size_work = (int)data.size();
70 MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
72 for (rank = 1; rank < ntasks; ++rank) {
74 MPI_Send(&work,1,MPI_INT,rank,
WORKTAG,MPI_COMM_WORLD);
79 MPI_Recv(&result,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
81 MPI_Send(&work,1,MPI_INT,status.MPI_SOURCE,
WORKTAG,MPI_COMM_WORLD);
86 for (rank = 1; rank < ntasks; ++rank) {
87 MPI_Recv(&result, 1, MPI_INT, MPI_ANY_SOURCE,
88 MPI_ANY_TAG, MPI_COMM_WORLD, &status);
92 for (rank = 1; rank < ntasks; ++rank) {
93 MPI_Send(0, 0, MPI_INT, rank,
DIETAG, MPI_COMM_WORLD);
96 std::cout <<
"sum of all iterations = " << sum << std::endl;
106 MPI_Recv(&work, 1, MPI_INT, 0, MPI_ANY_TAG,
107 MPI_COMM_WORLD, &status);
109 if (status.MPI_TAG ==
DIETAG) {
115 MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
121 if (
itr >= size_work) {
128 std::cout <<
"iteration = " <<
itr << std::endl;
137 std::string Rcmd =
"work <- sample(1:10, 1)";
138 Rcpp::NumericVector M = R.
parseEval(Rcmd);
static void do_work(int work, int &result, RInside &R)
void parseEvalQ(const std::string &line)
static int get_next_work_item(int &work, const int size_work, std::vector< int > &data)
int parseEval(const std::string &line, SEXP &ans)
int main(int argc, char **argv)
static void initalize(RInside &R)
static void slave(RInside &R)