int hpx_main() { typedef std::vector<std::size_t> vector_type; typedef std::vector<std::size_t>::iterator iterator_type; vector_type v1, v2; std::size_t count = 0; while (count < 2000) { v1.push_back(count); ++count; } iterator_type itr_b = v1.begin(); iterator_type itr_e = v1.end(); typedef boost::iterator_range<iterator_type> range_type; range_type my_range(itr_b, itr_e); v2.reserve(v1.size()); iterator_type itr_o = v2.begin(); (void)itr_o; std::size_t i = 0; for (std::size_t const& v : my_range) { hpx::async(hpx::util::protect(print_obj<std::size_t>()), v); ++i; } return hpx::finalize(); // Handles HPX shutdown }
int gather_array(void) { if(get_GATHR()) return 0; double buff[(MAXDIM+3)*DIR]; for(int rank=1;rank<cpusize;rank++) { int iis, iit, jjs, jjt; my_range(rank, iis, iit, jjs, jjt); int data_len = (jjt-jjs+1)*DIR; for(int i=iis;i<=iit;i++) { if(myrank == rank) { int index=0; for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { buff[index] = Q[i][j][dir]; index ++; } MPI_Send(buff, data_len, MPI_DOUBLE, 0, i, MPI_COMM_WORLD); } if(myrank == 0) { MPI_Status mpi_err; MPI_Recv(buff, data_len, MPI_DOUBLE, rank, i, MPI_COMM_WORLD, &mpi_err); //std::cout<<"Recieved data["<<i<<"] from CPU "<<rank<<std::endl; int index = 0; for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { Q[i][j][dir] = buff[index]; index ++; } // std::cout<<"Recieved Q["<<i<<"] from CPU["<<rank<<"]"<<std::endl; } MPI_Barrier(MPI_COMM_WORLD); }// loop i }// loop rank set_GATHR(); return 1; }
void update_BC_node(void) { const int row=2; double buff[MAXDIM*row*DIR]; int data_len; for(int rank=0;rank<cpusize;rank++) { int iis, iit, jjs, jjt; my_range(rank, iis, iit, jjs, jjt); /* if(iis==2) { data_len = (jjt-jjs+1)*DIR*row; if(myrank==rank) // setup buff for send { int index = 0; for(int i=iis;i<=iis+row-1;i++) for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { buff[index] = Q[i][j][dir]; index ++; } } MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD); //std::cout<<myrank<<" Complete broadcast of LEFT from "<<rank<<std::endl; int index = 0; for(int i=iis;i<=iis+row-1;i++) for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { Q[i][j][dir] = buff[index]; index ++; } } //MPI_Barrier(MPI_COMM_WORLD); if(iit==IDIM) { data_len = (jjt-jjs+1)*DIR*row; if(myrank==rank) { int index = 0; for(int i=iit-(row-1);i<=iit;i++) for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { buff[index] = Q[i][j][dir]; index ++; } } MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD); //std::cout<<myrank<<" Complete broadcast of RIGHT from "<<rank<<std::endl; int index = 0; for(int i=iit-(row-1);i<=iit;i++) for(int j=jjs;j<=jjt;j++) for(int dir=0;dir<DIR;dir++) { Q[i][j][dir] = buff[index]; index ++; } } //MPI_Barrier(MPI_COMM_WORLD); */ if(jjs==2) { data_len = (iit-iis+1)*DIR*row; if(myrank==rank) { int index = 0; for(int i=iis;i<=iit;i++) for(int j=jjs;j<=jjs+(row-1);j++) for(int dir=0;dir<DIR;dir++) { buff[index] = Q[i][j][dir]; index ++; } } MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD); //std::cout<<myrank<<" Complete broadcast of BOTTOM from "<<rank<<std::endl; int index = 0; for(int i=iis;i<=iit;i++) for(int j=jjs;j<=jjs+(row-1);j++) for(int dir=0;dir<DIR;dir++) { Q[i][j][dir] = buff[index]; index ++; } } //MPI_Barrier(MPI_COMM_WORLD); /* if(jjt==JDIM) { data_len = (iit-iis+1)*DIR*row; if(myrank==rank) { int index = 0; for(int i=iis;i<=iit;i++) for(int j=jjt-(row-1);j<jjt;j++) for(int dir=0;dir<DIR;dir++) { buff[index] = Q[i][j][dir]; index ++; } } MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD); //std::cout<<myrank<<" Complete broadcast of TOP from "<<rank<<std::endl; int index = 0; for(int i=iis;i<=iit;i++) for(int j=jjt-(row-1);j<jjt;j++) for(int dir=0;dir<DIR;dir++) { Q[i][j][dir] = buff[index]; index ++; } } //MPI_Barrier(MPI_COMM_WORLD); */ } }