Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include "mpi.h"
  5.  
  6. int main(int argc, char* argv[]){
  7. int my_rank,RecRank; /* rank of process */
  8. int p; /* number of processes */
  9. int source; /* rank of sender */
  10. int dest; /* rank of receiver */
  11. int tag0=0; /* tag for messages */
  12. int tag1=1;
  13. //char message[100]; /* storage for message */
  14. MPI_Status status ; /* return status for receive */
  15. //MPI_Comm newComm;
  16. /* start up MPI */
  17.  
  18. MPI_Init(&argc, &argv);
  19.  
  20. /* find out process rank */
  21. MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
  22.  
  23. /* find out number of processes */
  24. MPI_Comm_size(MPI_COMM_WORLD, &p);
  25. //MPI_Cart_create(MPI_COMM_WORLD,1,(int*)p,(int*)1,1,&new_comm);
  26.  
  27. if(my_rank==0){
  28. source=p-1;
  29. }else{
  30. source=my_rank-1;
  31. }
  32.  
  33. if(my_rank== p-1){
  34. dest=0;
  35. }else{
  36. dest=my_rank+1;
  37. }
  38.  
  39. MPI_Send(&my_rank, 1, MPI_INT, dest, tag0, MPI_COMM_WORLD);
  40. while (1){
  41. MPI_Recv(&RecRank, 1, MPI_INT, source, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
  42. if(status.MPI_TAG==0){
  43. if(RecRank>my_rank){
  44. MPI_Send(&RecRank, 1, MPI_INT, dest, tag0, MPI_COMM_WORLD);
  45. }else if(RecRank==my_rank){
  46. MPI_Send(&RecRank, 1, MPI_INT, dest, tag1, MPI_COMM_WORLD);
  47. }
  48.  
  49. }else{
  50. if(RecRank!=my_rank){
  51. MPI_Send(&RecRank, 1, MPI_INT, dest, tag1, MPI_COMM_WORLD);
  52. }
  53. break;
  54. }
  55. }
  56. printf("liderul: %d\n",RecRank);
  57.  
  58. /* shut down MPI */
  59. MPI_Finalize();
  60.  
  61. return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement