You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
172 Paralelizacija GA za rešavanje nekih NP-kompletnih problema<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
podataka, a zatim čeka pošiljaoca da mu ih pošalje. Pošiljalac izvršava datu<br />
naredbu slanja podataka samo ako je prethodno primio odgovarajući zahtev.<br />
Ako je komunikacija blokirajuća, pri slanju odgovarajući proces nastavlja sa<br />
<strong>rad</strong>om tek po završetku cele operacije, kada su odgovarajući podaci poslati, pa<br />
je moguće ponovo koristi njihove memorijske lokacije. Slično tome, pri prijemu<br />
poruke, dati proces nastavlja sa <strong>rad</strong>om tek pošto je primio celu poruku.<br />
Neblokirajući način inicira komunikaciju, a odgovarajući proces odmah zatim<br />
nastavlja sa daljim <strong>rad</strong>om, uporedo sa slanjem ili prijemom date poruke. Pri<br />
tome je postavljen poseban objekat, na osnovu koga je moguće kontrolisati tok i<br />
završetak tekuće komunikacije. Ovaj način može u nekim slučajevima biti<br />
pogodan, iako zahteva veću kontrolu od strane programera.<br />
D.1.5 Kolektivne komunikacije<br />
Kolektivne komunikacije obezbeđuju fleksibilan način za razmenu podataka<br />
između procesora koji pripadaju istoj grupi. Za razliku od pojedinačnih<br />
komunikacija poruke u kolektivnim komunikacijama nemaju tag i mogu se<br />
koristiti samo lokalni komunikatori, pošto to jedino ima smisla. Odgovarajuća<br />
operacija za kolektivnu komunikaciju mora biti pozvana od svih procesa u datoj<br />
grupi, tako da se argumenti odgovarajuće funkcije moraju slagati po tipu i<br />
vrednosti.<br />
Sve operacije za kolektivnu komunikaciju su realizovane isključivo kao<br />
blokirajuće. Svaki proces po završetku svog udela u celoj komunikaciji može da<br />
nastavi dalje sa <strong>rad</strong>om. U nekim MPI implementacijama su funkcije za<br />
kolektivne komunikacije realizovane korišćenjem funkcija za pojedinačnu<br />
komunikaciju, ali se takav pristup izbegava u novijim MPI implementacijama,<br />
koje teže vrhunskim performansama.<br />
D.1.6 Globalno izračunavanje<br />
MPI osim lokalnog izračunavanja na datom procesoru (procesu) omogućuje i<br />
globalno izračunavanje neke operacije na svim procesima u datoj grupi. Pored<br />
nekih osnovnih operacija obezbeđenih od sistema, moguće je i zadavanje<br />
operacija koje definiše sam korisnik. Globalne operacije se mogu izvršavati<br />
kako na pojedinačnim, tako i na vektorskim podacima. Iako se globalno<br />
izračunavanje može emulirati lokalnim izračunavanjima na datim procesima uz<br />
potrebnu međuprocesorsku komunikaciju, ovakav pristup ima vrlo kratak zapis<br />
uz maksimalno očuvanje efikasnosti izvršavanja.<br />
D.2 MPI konstrukcije korišćene u implementiranju PGANP<br />
Najveća pažnje će biti poklonjena delovima koji su potrebni za paralelnu GA<br />
implementaciju, koju je autor razvio koristeći MPI standard. Ove konstrukcije će<br />
biti nešto detaljnije opisane, a pregled ostalih se može videti u narednom<br />
odeljku. Zbog kraćeg zapisa, u prikazu funkcija će biti dati samo odgovarajući<br />
argumenti, dok se tipovi svih argumenata MPI funkcija mogu naći na kraju ovog<br />
dodatka.<br />
D.2.1 Inicijalizacija<br />
Inicijalizacija u MPI standardu se vrši funkcijom MPI_Init(argc, argv). Ona se<br />
mora pozvati pre korišćenja bilo koje druge MPI funkcije, i to najviše jednom.<br />
Verzija za ANSI C prihvata &argc i &argv koje su dobijene od main() funkcije.