Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mpi::request reqs[16];
- std::string leftcol = "";
- std::string rightcol = "";
- for (int i = 0; i < k; ++i){
- leftcol += grid[1+ (i+1)*(k+2)];
- rightcol += grid[k + (i + 1)*(k + 2)];
- }
- std::cout << "ok " << myid << std:: endl;
- reqs[0] = world.isend(toindex2(myrow-1,mycol-1), EXCHANGE_TAG, grid[k+2+1]);
- reqs[1] = world.isend(toindex2(myrow - 1, mycol ), EXCHANGE_TAG, std::string(grid + k+2+1, k));
- reqs[2] = world.isend(toindex2(myrow - 1, mycol + 1), EXCHANGE_TAG, grid[k+2+k]);
- reqs[3] = world.isend(toindex2(myrow , mycol - 1), EXCHANGE_TAG, leftcol);
- reqs[4] = world.isend(toindex2(myrow , mycol + 1), EXCHANGE_TAG, rightcol);
- reqs[5] = world.isend(toindex2(myrow + 1, mycol - 1), EXCHANGE_TAG, grid[k*(k+2)+1]);
- reqs[6] = world.isend(toindex2(myrow + 1, mycol ), EXCHANGE_TAG, std::string(grid + k*(k+2)+1, k));
- reqs[7] = world.isend(toindex2(myrow + 1, mycol + 1), EXCHANGE_TAG, grid[k*(k+2)+k]);
- std::cout << "ok sended" << myid << std::endl;
- char leftprev, rightprev, leftnext, rightnext;
- std::string prev, next, left, right;
- reqs[8] = world.irecv(toindex2(myrow - 1, mycol - 1), EXCHANGE_TAG, leftprev);
- reqs[9] = world.irecv(toindex2(myrow - 1, mycol), EXCHANGE_TAG, prev);
- reqs[10] = world.irecv(toindex2(myrow - 1, mycol + 1), EXCHANGE_TAG, rightprev);
- reqs[11] = world.irecv(toindex2(myrow, mycol - 1), EXCHANGE_TAG, left);
- reqs[12] = world.irecv(toindex2(myrow, mycol + 1), EXCHANGE_TAG, right);
- reqs[13] = world.irecv(toindex2(myrow + 1, mycol - 1), EXCHANGE_TAG, leftnext);
- reqs[14] = world.irecv(toindex2(myrow + 1, mycol), EXCHANGE_TAG, next);
- reqs[15] = world.irecv(toindex2(myrow + 1, mycol + 1), EXCHANGE_TAG, rightnext);
- std::cout << "ok received" << myid<< std::endl;
- mpi::wait_all(reqs , reqs + 16);
- grid[0] = leftprev;
- grid[k+1] = rightprev;
- grid[(k+1)*(k+2)] = leftnext;
- grid[(k+2)*(k+2)-1] = rightnext;
- memcpy(grid+1, prev.c_str(), k);
- memcpy(grid+(k+1)*(k+2)+1, next.c_str(), k);
- for (int i = 0; i < k; ++i){
- grid[(i + 1)*(k + 2)] = left[i];
- grid[k+1+(i + 1)*(k + 2)] = right[i];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement