Advertisement
Guest User

Untitled

a guest
May 27th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include "pvm3.h"
  5. // min max z macierzy
  6. int Parent()
  7. {
  8. int counter=0;
  9. struct pvmhostinfo *info;
  10. int *tid, tidmaster, ilhost, ilarch, i;
  11. int size = 4;
  12. int matrix[4][4]={{11,2,3,4},{4,3,56,8},{5,8,13,4},{12,5,3,23}};
  13. int min=matrix[0][0];
  14. int max=matrix[0][0];
  15.  
  16. pvm_mytid();
  17. pvm_config (&ilhost, &ilarch, &info);
  18.  
  19. // Inicjalizacja
  20.  
  21. tid = (int *)calloc(ilhost, sizeof(int));
  22. //ilhost=1;
  23. for (i=0;i<ilhost;i++){
  24. pvm_spawn("/home/pvm/pvm3/lab5/minmax", 0, PvmTaskHost, info[i].hi_name, 1,&tid[i]);
  25.  
  26. pvm_initsend(PvmDataDefault);
  27. // przygotowanie danych
  28. pvm_pkint(&size,1 ,1);//rozmiar pakietu danych(wiersz)
  29. int tabpom[size];
  30. int j;
  31. for(j=0;j<size;j++) {
  32. tabpom[j]=matrix[i][j];
  33. }
  34. pvm_pkint(tabpom,size,1);// wiersz macierzy
  35.  
  36. //wysylanie
  37. pvm_send(tid[i], 100);
  38.  
  39. }
  40. // Podzial zadan
  41. bool zadania = 0;
  42. int arrayvalue[2];
  43.  
  44. int y;
  45. int x;
  46.  
  47. int temp;
  48. int temp2;
  49. int wynik[2];
  50. // Odbieranie zadan
  51. while(!zadania){
  52.  
  53. x=pvm_recv(-1, 200);
  54. pvm_bufinfo(x,&temp,&temp2,&y);
  55. pvm_upkint(wynik, 2, 1);
  56. printf("WIERSZ MAX %d : %d\n", counter + 1, wynik[0]);
  57. printf("WIERSZ MIN %d : %d\n", counter + 1, wynik[1]);
  58. if(min > wynik[1])
  59. min = wynik[1];
  60. if(max < wynik[0])
  61. max = wynik[0];
  62.  
  63. if(!zadania)
  64. {
  65. // Wysylanie kolejnego zadania
  66. pvm_initsend(PvmDataDefault);
  67. pvm_pkint(&size,1 ,1);
  68. pvm_pkint(matrix[counter + ilhost],size,1);
  69. pvm_send(y, 100);
  70. }
  71. counter++;
  72. if(counter + ilhost>=size)
  73. zadania = 1;
  74. }
  75.  
  76.  
  77. for(i=0;i<ilhost;i++)
  78. {
  79. x=pvm_recv(-1, 200);
  80. pvm_bufinfo(x,&temp,&temp2,&y);
  81. pvm_upkint(wynik, 2, 1);
  82. printf("WIERSZ MAX %d : %d\n", counter + 1, wynik[0]);
  83. printf("WIERSZ MIN %d : %d\n", counter + 1, wynik[1]);
  84. if(min>wynik[1])
  85. min=wynik[1];
  86. if(max<wynik[0])
  87. max=wynik[0];
  88.  
  89. }
  90.  
  91. for(i = 0 ; i < ilhost ; i++)
  92. {
  93. pvm_kill(tid[i]);
  94. }
  95. printf("MIN : %d MAX : %d\n",min, max);
  96. pvm_exit();
  97.  
  98. }
  99. int Potomek()
  100. {
  101. int size;
  102. int masterid;
  103. int i;
  104. int minValue, maxValue;
  105. int results[2];
  106. int dane[100];
  107. masterid = pvm_parent();
  108.  
  109. while(1)
  110. {
  111. pvm_recv(masterid, 100);//masterid
  112. pvm_upkint(&size, 1, 1);
  113. pvm_initsend(PvmDataDefault);
  114.  
  115. pvm_upkint(dane, size, 1);
  116. maxValue=dane[0];
  117. minValue=dane[0];
  118. for(i = 0 ; i < size; i++)
  119. {
  120. if (dane[i] > maxValue)
  121. maxValue = dane[i];
  122. if (dane[i] < minValue)
  123. minValue = dane[i];
  124. }
  125.  
  126. results[0] = maxValue;
  127. results[1] = minValue;
  128.  
  129. pvm_pkint(results, 2, 1);
  130. pvm_send(masterid, 200);
  131. }
  132. return 0;
  133. }
  134. int main()
  135. {
  136. // Main
  137. if (pvm_parent() == PvmNoParent) {
  138.  
  139. // Uruchamiam rodzica
  140. /* jestem procesem głównym */
  141. Parent(); /* argv[0] - nazwa programu */
  142.  
  143. // Konczenie Rodzica
  144. }
  145. else {
  146.  
  147. Potomek();/* jestem procesem potomnym */
  148.  
  149. }
  150. return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement