Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include "pvm3.h"
- // min max z macierzy
- int Parent()
- {
- int counter=0;
- struct pvmhostinfo *info;
- int *tid, tidmaster, ilhost, ilarch, i;
- int size = 4;
- int matrix[4][4]={{11,2,3,4},{4,3,56,8},{5,8,13,4},{12,5,3,23}};
- int min=matrix[0][0];
- int max=matrix[0][0];
- pvm_mytid();
- pvm_config (&ilhost, &ilarch, &info);
- // Inicjalizacja
- tid = (int *)calloc(ilhost, sizeof(int));
- //ilhost=1;
- for (i=0;i<ilhost;i++){
- pvm_spawn("/home/pvm/pvm3/lab5/minmax", 0, PvmTaskHost, info[i].hi_name, 1,&tid[i]);
- pvm_initsend(PvmDataDefault);
- // przygotowanie danych
- pvm_pkint(&size,1 ,1);//rozmiar pakietu danych(wiersz)
- int tabpom[size];
- int j;
- for(j=0;j<size;j++) {
- tabpom[j]=matrix[i][j];
- }
- pvm_pkint(tabpom,size,1);// wiersz macierzy
- //wysylanie
- pvm_send(tid[i], 100);
- }
- // Podzial zadan
- bool zadania = 0;
- int arrayvalue[2];
- int y;
- int x;
- int temp;
- int temp2;
- int wynik[2];
- // Odbieranie zadan
- while(!zadania){
- x=pvm_recv(-1, 200);
- pvm_bufinfo(x,&temp,&temp2,&y);
- pvm_upkint(wynik, 2, 1);
- printf("WIERSZ MAX %d : %d\n", counter + 1, wynik[0]);
- printf("WIERSZ MIN %d : %d\n", counter + 1, wynik[1]);
- if(min > wynik[1])
- min = wynik[1];
- if(max < wynik[0])
- max = wynik[0];
- if(!zadania)
- {
- // Wysylanie kolejnego zadania
- pvm_initsend(PvmDataDefault);
- pvm_pkint(&size,1 ,1);
- pvm_pkint(matrix[counter + ilhost],size,1);
- pvm_send(y, 100);
- }
- counter++;
- if(counter + ilhost>=size)
- zadania = 1;
- }
- for(i=0;i<ilhost;i++)
- {
- x=pvm_recv(-1, 200);
- pvm_bufinfo(x,&temp,&temp2,&y);
- pvm_upkint(wynik, 2, 1);
- printf("WIERSZ MAX %d : %d\n", counter + 1, wynik[0]);
- printf("WIERSZ MIN %d : %d\n", counter + 1, wynik[1]);
- if(min>wynik[1])
- min=wynik[1];
- if(max<wynik[0])
- max=wynik[0];
- }
- for(i = 0 ; i < ilhost ; i++)
- {
- pvm_kill(tid[i]);
- }
- printf("MIN : %d MAX : %d\n",min, max);
- pvm_exit();
- }
- int Potomek()
- {
- int size;
- int masterid;
- int i;
- int minValue, maxValue;
- int results[2];
- int dane[100];
- masterid = pvm_parent();
- while(1)
- {
- pvm_recv(masterid, 100);//masterid
- pvm_upkint(&size, 1, 1);
- pvm_initsend(PvmDataDefault);
- pvm_upkint(dane, size, 1);
- maxValue=dane[0];
- minValue=dane[0];
- for(i = 0 ; i < size; i++)
- {
- if (dane[i] > maxValue)
- maxValue = dane[i];
- if (dane[i] < minValue)
- minValue = dane[i];
- }
- results[0] = maxValue;
- results[1] = minValue;
- pvm_pkint(results, 2, 1);
- pvm_send(masterid, 200);
- }
- return 0;
- }
- int main()
- {
- // Main
- if (pvm_parent() == PvmNoParent) {
- // Uruchamiam rodzica
- /* jestem procesem głównym */
- Parent(); /* argv[0] - nazwa programu */
- // Konczenie Rodzica
- }
- else {
- Potomek();/* jestem procesem potomnym */
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement