Advertisement
Guest User

p2lol

a guest
Oct 21st, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. void Vector_sum(double x[], double y[], double z[], int n)
  2. {
  3. int elemsPerProc = n / comm_sz;
  4. int extraElems = n % comm_sz;
  5.  
  6. //create recv buffers
  7. double* recvbuffx = (double *) malloc(sizeof(double) * (elemsPerProc + extraElems));
  8. double* recvbuffy = (double *) malloc(sizeof(double) * (elemsPerProc + extraElems));
  9.  
  10. //create sendcounts array
  11. int sendcounts[] = malloc(sizeof(int) * comm_sz);
  12. int mallocCtr = 0;
  13. for(mallocCtr; mallocCtr < comm_sz; mallocCtr++)
  14. {
  15. //add extra elems to main process
  16. if(mallocCtr == 0)
  17. {
  18. sendcounts[mallocCtr] = elemsPerProc + extraElems;
  19. }
  20. else
  21. {
  22. sendcounts[mallocCtr] = elemsPerProc;
  23. }
  24. }
  25.  
  26. //root scatters elements
  27. if(myid == 0)
  28. {
  29. MPI_Scatterv{x, sendcounts, sendcounts, MPI_Double, recvbuffx, elemsPerProc + extraElems,
  30. MPI_Double, 0, MPI_COMM_WORLD};
  31. MPI_Scatterv{y, sendcounts, sendcounts, MPI_Double, recvbuffy, elemsPerProc + extraElems,
  32. MPI_Double, 0, MPI_COMM_WORLD};
  33. }
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement