Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. /*
  2. ============================================================================
  3. Name : Hyper.c
  4. Author :
  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 source; /* rank of sender */
  18. int dest; /* rank of receiver */
  19. int tag = 0; /* tag for messages */
  20. char message[100]; /* storage for message */
  21. MPI_Status status; /* return status for receive */
  22. int m;
  23. int s, sr;
  24. int mask;
  25. /* start up MPI */
  26.  
  27. MPI_Init(&argc, &argv);
  28.  
  29. /* find out process rank */
  30. MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
  31.  
  32. /* find out number of processes */
  33. MPI_Comm_size(MPI_COMM_WORLD, &p);
  34.  
  35. m = log(p) / log(2);
  36.  
  37. int A[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
  38.  
  39. mask = 0;
  40. int i;
  41. s = A[my_rank];
  42. for (i = 0; i < m; i++) {
  43. if ((my_rank & mask) == 0)
  44. if ((my_rank & (1 << i)) == 0) {
  45. source = my_rank ^ (1 << i);
  46. printf("SOURCE: %d\n", source);
  47. MPI_Recv(&sr, 1, MPI_INT, source, tag, MPI_COMM_WORLD,&status);
  48. s = s + sr;
  49. } else {
  50. dest = my_rank ^ (1 << i);
  51. printf("DEST: %d\n", dest);
  52. MPI_Send(&s, 1, MPI_INT, dest, tag, MPI_COMM_WORLD);
  53. }
  54. mask = mask ^ (1 << i);
  55. }
  56.  
  57. int j;
  58. int x=1<<(m-q);
  59. int sp[];
  60. for(j=0;j<(1<<(m-q);i++)
  61. {
  62. sp[j]=A[j*(1<<q)+id];
  63. mask=0;
  64. for(i=0;i<q-1;i++)
  65. {
  66. for(j=0;j< x;j++)
  67. {
  68. if((id&mask)==0)
  69. {
  70. if((id & (1<<i))==0)
  71. {
  72. source=id;
  73. MPI_Recv(&sr, 1, MPI_INT, source, tag, MPI_COMM_WORLD,&status);
  74. sp[j]=sp[j]+sr;
  75. }
  76. else
  77. {dest = my_rank ^ (1 << i);
  78. printf("DEST: %d\n", dest);
  79. MPI_Send(&sp[j], 1, MPI_INT, dest, tag, MPI_COMM_WORLD);
  80. }
  81.  
  82. }
  83. mask = mask ^ (1 << i);
  84. }
  85. }
  86. }
  87.  
  88.  
  89.  
  90. /*
  91. if (my_rank !=0){
  92. /* create message
  93. sprintf(message, "Hello MPI World from process %d!", my_rank);
  94. dest = 0;
  95. /* use strlen+1 so that '\0' get transmitted
  96. MPI_Send(message, strlen(message)+1, MPI_CHAR,
  97. dest, tag, MPI_COMM_WORLD);
  98. }
  99. else{
  100. printf("Hello MPI World From process 0: Num processes: %d\n",p);
  101. for (source = 1; source < p; source++) {
  102. MPI_Recv(message, 100, MPI_CHAR, source, tag,
  103. MPI_COMM_WORLD, &status);
  104. printf("%s\n",message);
  105. }
  106. }*/
  107. /* shut down MPI */
  108. MPI_Finalize();
  109.  
  110. return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement