Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. /*
  2. ============================================================================
  3. Name : Lab4.c
  4. Author : Gabi
  5. Version :
  6. Copyright : Your copyright notice
  7. Description : Hello MPI World in C
  8. ============================================================================
  9. */
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include "mpi.h"
  13.  
  14. int main(int argc, char* argv[]){
  15. int my_rank; /* rank of process */
  16. int p; /* number of processes */
  17. int tag=0; /* tag for messages */
  18. MPI_Status status ; /* return status for receive */
  19. char mes[100];
  20. int dim;
  21. int id;
  22. int s_id;
  23. int id_virtual;
  24. int masca;
  25. int k;
  26. int destinatie_virtuala;
  27. int sursa_virtuala;
  28.  
  29. MPI_Init(&argc, &argv); /* start up MPI */
  30. MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); /* find out process rank */
  31. MPI_Comm_size(MPI_COMM_WORLD, &p); /* find out number of processes */
  32.  
  33. id_virtual = id ^ s_id;
  34. masca = (2<<dim)-1;
  35.  
  36. for(k=dim-1; k>=0; k--)
  37. {
  38. masca = masca ^ (2<<k);
  39. if((id_virtual & masca) ==0)
  40. {
  41. if((id_virtual & (2<<k)) == 0)
  42. {
  43. destinatie_virtuala = id_virtual ^ (2<<k);
  44. sprintf(mes, "Hello MPI World from process %d!", my_rank);
  45. MPI_Send(mes, strlen(mes)+1, MPI_CHAR, destinatie_virtuala, tag, MPI_COMM_WORLD);
  46. }
  47. else
  48. {
  49. sursa_virtuala = id_virtual ^ (2<<k);
  50. MPI_Recv(mes, 100, MPI_CHAR, sursa_virtuala, tag, MPI_COMM_WORLD, &status);
  51. printf("%s\n",mes);
  52. }
  53. }
  54. }
  55.  
  56. MPI_Finalize(); /* shut down MPI */
  57.  
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement