Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://www.filedropper.com/lab2
- http://www.filedropper.com/praktikumizparalelnihsistema
- http://www.filedropper.com/shabanova-matrica
- SYSTEM Lab2;
- CONST
- n = 3; (*Dimenzija matrice*)
- m = n + 2 * ( n - 1); (*Dimenzija vrste/kolone Shabanove matrice A i B*)
- TYPE matrica = array[1..n],[1..n] of real; (*Tip matrice se definise (typedef) *)
- CONFIGURATION mat[1..n],[1..n]; (*Konfiguracija polja procesnih jedinica u obliku matrice NxN*)
- CONNECTION (*Definisanje veze izmedju procesnih jedinica*)
- 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*)
- dole:mat[i,j]->mat[i+1,j].dole; (*Istom analogijom i ovo*)
- SCALAR (*Definisemo skalarne promenljive na glavnom procesoru*)
- ma:matrica; (*Ulazna/Izlazna matrica. Koristi se za ucitavanje i ispis rezultata na kraju*)
- a:array[1..n],[1..m] of real; (*Matrica A, ako je N=3 onda je M=7, za sistolicko mnozenje matrica*)
- b:array[1..m],[1..n] of real; (*Matrica B, ako je N=3 onda je M=7, za sistolicko mnozenje matrica*)
- niz:array[1..n] of real; (*Niz za prebacivanje redova i kolona matrice u procsene elemente*)
- i,j:cardinal; (*unsigned int promenljive 0-65536*)
- VECTOR (*Definisemo vektorske promenljive na procesnim poljima*)
- av,bv,c:real; (*AV,BV su trenutni dolazni elementi, C = C + AV*BV mnozi matricu vrsta * kolona*)
- procedure stampanje(scalar var u:matrica); (*Stampanje matrice, ZA Petrovica var znaci po referenci se prenosi matrica U*)
- SCALAR (*Lokalne promenljive ZA Petrovica*)
- i,j:cardinal;
- BEGIN
- for i:=1 to n do
- for j:= 1 to n do
- Writefixpt(u[i,j],7,2); (*Stampamo u fixnom zarezu 7 cifre 2 decimale*)
- end;
- WriteLn;
- end;
- WriteLn;
- end stampanje;
- BEGIN (*Telo programa ZA Petrovica*)
- WriteLn;
- WriteString("Unesi elemente prve matrice");
- WriteLn;
- WriteLn;
- for i:=1 to n do (*Ucitavanje matrice*)
- for j:= 1 to n do
- ReadReal(ma[i,j]);
- end;
- end;
- (*Kreira se matrica A kao na slici http://i.imgur.com/DBZ5wKJ.png*)
- for i:=1 to n do
- for j:=1 to m do
- if i <= j < i+n then (* i <= j glavna dijagonala, j < i+n iznad dijagonale*)
- a[i,j] := ma[i,j-i+1]; (*Kreira se matrica 3x7 sa 3 reda i 7 kolone*)
- else
- a[i,j] := 0.0; (*stavlja se nula*)
- end;
- end;
- end;
- WriteLn;
- (*DOdato kao *)
- WriteString("Stampanje a:");
- Writeln;
- for i:=1 to n do
- for j:=1 to m do
- Writefixpt(a[i,j],7,2);
- end;
- WriteLn;
- end;
- Writeln;
- WriteString("Matrica a:"); WriteLn;WriteLn;
- stampanje(ma);
- WriteString("Unesi elemente druge matrice");WriteLn;WriteLn;
- for i:=1 to n do
- for j:= 1 to n do
- ReadReal(ma[i,j]);
- end;
- end;
- for i:=1 to m do
- for j:=1 to n do
- if j <= i < j+n then
- b[i,j] := ma[i-j+1,j];
- else
- b[i,j] := 0.0;
- end;
- end;
- end;
- (*DOdato kao *)
- WriteString("Stampanje b:");
- Writeln;
- for i:=1 to m do
- for j:=1 to n do
- Writefixpt(b[i,j],7,2);
- end;
- WriteLn;
- end;
- Writeln;
- WriteLn;
- WriteString("Matrica b:"); WriteLn;WriteLn;
- stampanje(ma);
- PARALLEL (*u procesnim elementima resetuje vrednosti*)
- av := 0.0;
- bv := 0.0;
- c := 0.0;
- ENDPARALLEL;
- for j := 1 to m do
- for i:=1 to n do
- niz[i] := a[i,j]; (*Ucitava redom kolone na dole iz A u niz*)
- end;
- load [*],[1] (av,niz); (*Ucitava u AV promenljivu procesnih elemenata po jednu vrednost iz niz na odgovarajucem mestu*)
- for i:=1 to n do
- niz[i]:= b[j,i]; (*Ucitava redom vrste na desno iz B u niz*)
- end;
- load [1],[*](bv,niz); (*Ucitava u BV procesnog elementa njegov odgovarajuci element iz niza*)
- PARALLEL
- c:=c + av*bv; (*Mnozimo elemente matrice*)
- PROPAGATE.desno(av); (*Gura AV na sledeci procesni element*)
- PROPAGATE.dole(bv); (*Gura BV na sledeci procesni element*)
- ENDPARALLEL;
- end;
- store (c,ma); (*U MA ubacuje C iz procesnih elemenata u glavnu matricu*)
- WriteString("-----------------------");WriteLn;WriteLn;
- WriteString("Proizvod matrica a i b:"); WriteLn;
- WriteLn;
- stampanje(ma); (*Stampa matricu*)
- WriteString("-----------------------");
- END Lab2.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement