Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. mpi::request reqs[16];
  2. std::string leftcol = "";
  3. std::string rightcol = "";
  4. for (int i = 0; i < k; ++i){
  5. leftcol += grid[1+ (i+1)*(k+2)];
  6. rightcol += grid[k + (i + 1)*(k + 2)];
  7. }
  8. std::cout << "ok " << myid << std:: endl;
  9. reqs[0] = world.isend(toindex2(myrow-1,mycol-1), EXCHANGE_TAG, grid[k+2+1]);
  10. reqs[1] = world.isend(toindex2(myrow - 1, mycol ), EXCHANGE_TAG, std::string(grid + k+2+1, k));
  11. reqs[2] = world.isend(toindex2(myrow - 1, mycol + 1), EXCHANGE_TAG, grid[k+2+k]);
  12. reqs[3] = world.isend(toindex2(myrow , mycol - 1), EXCHANGE_TAG, leftcol);
  13. reqs[4] = world.isend(toindex2(myrow , mycol + 1), EXCHANGE_TAG, rightcol);
  14. reqs[5] = world.isend(toindex2(myrow + 1, mycol - 1), EXCHANGE_TAG, grid[k*(k+2)+1]);
  15. reqs[6] = world.isend(toindex2(myrow + 1, mycol ), EXCHANGE_TAG, std::string(grid + k*(k+2)+1, k));
  16. reqs[7] = world.isend(toindex2(myrow + 1, mycol + 1), EXCHANGE_TAG, grid[k*(k+2)+k]);
  17. std::cout << "ok sended" << myid << std::endl;
  18. char leftprev, rightprev, leftnext, rightnext;
  19. std::string prev, next, left, right;
  20. reqs[8] = world.irecv(toindex2(myrow - 1, mycol - 1), EXCHANGE_TAG, leftprev);
  21. reqs[9] = world.irecv(toindex2(myrow - 1, mycol), EXCHANGE_TAG, prev);
  22. reqs[10] = world.irecv(toindex2(myrow - 1, mycol + 1), EXCHANGE_TAG, rightprev);
  23. reqs[11] = world.irecv(toindex2(myrow, mycol - 1), EXCHANGE_TAG, left);
  24. reqs[12] = world.irecv(toindex2(myrow, mycol + 1), EXCHANGE_TAG, right);
  25. reqs[13] = world.irecv(toindex2(myrow + 1, mycol - 1), EXCHANGE_TAG, leftnext);
  26. reqs[14] = world.irecv(toindex2(myrow + 1, mycol), EXCHANGE_TAG, next);
  27. reqs[15] = world.irecv(toindex2(myrow + 1, mycol + 1), EXCHANGE_TAG, rightnext);
  28.  
  29. std::cout << "ok received" << myid<< std::endl;
  30. mpi::wait_all(reqs , reqs + 16);
  31.  
  32. grid[0] = leftprev;
  33. grid[k+1] = rightprev;
  34. grid[(k+1)*(k+2)] = leftnext;
  35. grid[(k+2)*(k+2)-1] = rightnext;
  36.  
  37. memcpy(grid+1, prev.c_str(), k);
  38. memcpy(grid+(k+1)*(k+2)+1, next.c_str(), k);
  39.  
  40. for (int i = 0; i < k; ++i){
  41. grid[(i + 1)*(k + 2)] = left[i];
  42. grid[k+1+(i + 1)*(k + 2)] = right[i];
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement