Advertisement
Vita94

Lab2-PRS

Apr 24th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.21 KB | None | 0 0
  1. http://www.filedropper.com/lab2
  2. http://www.filedropper.com/praktikumizparalelnihsistema
  3. http://www.filedropper.com/shabanova-matrica
  4.  
  5. SYSTEM Lab2;
  6.  
  7. CONST
  8.     n = 3;                                      (*Dimenzija matrice*)
  9.     m = n + 2 * ( n - 1);                       (*Dimenzija vrste/kolone Shabanove matrice A i B*)
  10.    
  11. TYPE matrica = array[1..n],[1..n] of real;      (*Tip matrice se definise (typedef) *)
  12. CONFIGURATION mat[1..n],[1..n];                 (*Konfiguracija polja procesnih jedinica u obliku matrice NxN*)
  13. CONNECTION                                      (*Definisanje veze izmedju procesnih jedinica*)
  14.     desno:mat[i,j]->mat[i,j+1].desno;           (*Izlazni desni port i,j se vezuje na ulazni desni port i,j+1 procesorskog polja*)
  15.     dole:mat[i,j]->mat[i+1,j].dole;             (*Istom analogijom i ovo*)
  16.    
  17. SCALAR                                          (*Definisemo skalarne promenljive na glavnom procesoru*)
  18.     ma:matrica;                                 (*Ulazna/Izlazna matrica. Koristi se za ucitavanje i ispis rezultata na kraju*)
  19.     a:array[1..n],[1..m] of real;               (*Matrica A, ako je N=3 onda je M=7, za sistolicko mnozenje matrica*)
  20.     b:array[1..m],[1..n] of real;               (*Matrica B, ako je N=3 onda je M=7, za sistolicko mnozenje matrica*)
  21.     niz:array[1..n] of real;                    (*Niz za prebacivanje redova i kolona matrice u procsene elemente*)
  22.     i,j:cardinal;                               (*unsigned int promenljive 0-65536*)
  23.    
  24. VECTOR                                          (*Definisemo vektorske promenljive na procesnim poljima*)
  25.     av,bv,c:real;                               (*AV,BV su trenutni dolazni elementi, C = C + AV*BV mnozi matricu vrsta * kolona*)
  26.    
  27. procedure stampanje(scalar var u:matrica);      (*Stampanje matrice, ZA Petrovica var znaci po referenci se prenosi matrica U*)
  28. SCALAR                                          (*Lokalne promenljive ZA Petrovica*)                       
  29.     i,j:cardinal;
  30. BEGIN
  31.     for i:=1 to n do
  32.         for j:= 1 to n do
  33.             Writefixpt(u[i,j],7,2);             (*Stampamo u fixnom zarezu 7 cifre 2 decimale*)
  34.         end;
  35.         WriteLn;
  36.     end;
  37.     WriteLn;
  38. end stampanje;
  39.  
  40. BEGIN                                           (*Telo programa ZA Petrovica*)
  41.     WriteLn;
  42.     WriteString("Unesi elemente prve matrice");
  43.     WriteLn;
  44.     WriteLn;
  45.     for i:=1 to n do                            (*Ucitavanje matrice*)
  46.         for j:= 1 to n do
  47.             ReadReal(ma[i,j]);
  48.         end;
  49.     end;
  50.     (*Kreira se matrica A kao na slici http://i.imgur.com/DBZ5wKJ.png*)
  51.     for i:=1 to n do                           
  52.         for j:=1 to m do
  53.             if i <= j < i+n then            (* i <= j glavna dijagonala, j < i+n iznad dijagonale*)
  54.                 a[i,j] := ma[i,j-i+1];      (*Kreira se matrica 3x7 sa 3 reda i 7 kolone*)
  55.             else
  56.                 a[i,j] := 0.0;              (*stavlja se nula*)
  57.             end;
  58.         end;
  59.     end;
  60.     WriteLn;
  61.     (*DOdato kao *)
  62.     WriteString("Stampanje a:");
  63.     Writeln;
  64.     for i:=1 to n do                           
  65.         for j:=1 to m do
  66.             Writefixpt(a[i,j],7,2);
  67.         end;
  68.         WriteLn;
  69.     end;
  70.     Writeln;
  71.  
  72.     WriteString("Matrica a:"); WriteLn;WriteLn;
  73.     stampanje(ma);
  74.  
  75.     WriteString("Unesi elemente druge matrice");WriteLn;WriteLn;
  76.     for i:=1 to n do
  77.         for j:= 1 to n do
  78.             ReadReal(ma[i,j]);
  79.         end;
  80.     end;
  81.     for i:=1 to m do
  82.         for j:=1 to n do
  83.             if j <= i < j+n then
  84.                 b[i,j] := ma[i-j+1,j];
  85.             else
  86.                 b[i,j] := 0.0;
  87.             end;
  88.         end;
  89.     end;
  90.  
  91.     (*DOdato kao *)
  92.     WriteString("Stampanje b:");
  93.     Writeln;
  94.     for i:=1 to m do                           
  95.         for j:=1 to n do
  96.             Writefixpt(b[i,j],7,2);
  97.         end;
  98.         WriteLn;
  99.     end;
  100.     Writeln;
  101.  
  102.     WriteLn;
  103.     WriteString("Matrica b:"); WriteLn;WriteLn;
  104.     stampanje(ma);
  105.  
  106.     PARALLEL                                (*u procesnim elementima resetuje vrednosti*)
  107.         av := 0.0;
  108.         bv := 0.0;
  109.         c := 0.0;
  110.     ENDPARALLEL;
  111.  
  112.     for j := 1 to m do
  113.        
  114.         for i:=1 to n do
  115.             niz[i] := a[i,j];           (*Ucitava redom kolone na dole iz A u niz*)
  116.         end;
  117.         load [*],[1] (av,niz);          (*Ucitava u AV promenljivu procesnih elemenata po jednu vrednost iz niz na odgovarajucem mestu*)
  118.  
  119.         for i:=1 to n do
  120.             niz[i]:= b[j,i];            (*Ucitava redom vrste na desno iz B u niz*)
  121.         end;
  122.         load [1],[*](bv,niz);           (*Ucitava u BV procesnog elementa njegov odgovarajuci element iz niza*)
  123.    
  124.         PARALLEL
  125.             c:=c + av*bv;               (*Mnozimo elemente matrice*)
  126.             PROPAGATE.desno(av);        (*Gura AV na sledeci procesni element*)
  127.             PROPAGATE.dole(bv);         (*Gura BV na sledeci procesni element*)
  128.         ENDPARALLEL;
  129.  
  130.     end;
  131.     store (c,ma);                       (*U MA ubacuje C iz procesnih elemenata u glavnu matricu*)
  132.     WriteString("-----------------------");WriteLn;WriteLn;
  133.     WriteString("Proizvod matrica a i b:"); WriteLn;
  134.     WriteLn;
  135.     stampanje(ma);                      (*Stampa matricu*)
  136.     WriteString("-----------------------");
  137.  
  138. END Lab2.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement