Академический Документы
Профессиональный Документы
Культура Документы
Osijek, 2016.
1. Usporedite raspodijeljeno i centralizirano računalstvo, te navedite barem tri
primjera raspodijeljenih računalnih sustava.
Najniži sloj su raspodijeljeni operacijski sustavi, iznad njih nalazi se posrednički sloj dok je na
vrhu aplikacijski sloj odnosno aplikacije.
Raspodjeljeni i mrežni OS (DOS i NOS):
o DOS (Distributed OS) - Čvrsto povezan OS za višeprocesorske i istorodne
višeračunalne sustave. Skriva sklopovlje i upravlja njime.
o NOS (Network OS) - Lagano povezan OS za raznorodni višeračunalni sustav (LAN
i WAN). Omogućava lokalne usluge udaljenim klijentima.
Posrednički sloj – širi se preko više strojeva i omogućuje aplikacijama isto sučelje. Čini
raspodijeljenu prirodu aplikacije transparentnom prema korisniku/programeru
Raspodijeljene aplikacije - Aplikacije koje se sastoje od skupa procesa koji su
raspodijeljeni po mreži računala i rade zajedno kao postrojenje za rješavanje zajedničkog
problema
1
3. Navedite i ukratko objasnite barem 5 izazova raspodijeljenog računarstva.
Proširivost odn. nadogradivost postaje sve značajnija, jer se računalna okružja bitno mijenjaju.
Problem predstavlja centralizacija usluga, algoritama i podataka.
2
5. Objasnite problem i rješenja transparentnosti raspodijeljenog računalnog
sustava.
Sinkroni raspodijeljeni sustav - Vrijeme za izvođenje svakog koraka procesa ima donju i
gornju granicu, svaka poruka prenesena kanalom, primljena je bez poznatih ograničenja u
kašnjenju, svaki proces ima lokalni sat čiji drift je ograničenje s gledišta rada u stvarnom
vremenu. U sinkronom sustavu, odstupanja u vremenu (timeouts) mogu poslužiti za
otkrivanje pogrešaka
Asinkroni raspodijeljeni sustav - Svaki korak procesa može trajati proizvoljno dugo
vremena, vrijeme isporuke poruka je proizvoljno, driftovi satova su proizvoljni. U
asinkronom sustavu nemoguće je otkriti pogrešku ili “postići sporazum – reach agreement”.
3
7. Navedite barem 5 proizvoljnih i vremenskih pogrešaka u raspodijeljenom
računalnom sustavu
Proizvoljne pogreške:
o Stop-pogreška – utječe na proces - Proces staje i ostaje zaustavljen. Ostali procesi
mogu otkriti o stanje
o Ispad (crash) – utječe na proces - Proces staje i ostaje zaustavljen. Ostali procesi
ne mogu otkriti to stanje pogreške.
o Propust (omission) - utječe na kanal - Poruka ubačena u spremnik odlaznih
poruka nikada ne Stiže na drugu stranu, odn spremnik dolaznih poruka.
Vremenske pogreške:
o Sat – utjecaj na proces - Procesov lokalni sat prekoračuje ograničenja u driftu (real
time).
o Performanse – utjecaj na proces - Proces prekoračuje ograničenja intervala
između dva koraka.
4
9. Objasnite osnovna svojstva raspodijeljenih aplikacija i skicirajte postupak
pozivanja poslužitelja od strane klijenata.
5
10. Skicirajte osnovne oblike organiziranja procesora i memorije u raspodijeljenim
računalnim sustavima, te oblike višeprocesorskih i višeračunalnih sustava
6
Slika 1.10. Istorodni višeračunalni sustavi
7
13. Skicirajte i ukratko objasnite paradigmu izmjene poruka.
Proces šalje poruku, koja često predstavlja zahtjev. Poruka je isporučena prijemniku, koji je
obrađuje i moguće šalje kao odziv. Obrnuto, odgovori mogu okidati sljedeći zahtjev koji vodi
do sljedećeg odziva i tako dalje. Osnovne operacije koje podupiru izmjenu poruka: send i
receive. Za komuniciranje zasnovano na spajanju, potrebne su i operacije connect i disconnect.
Apstrakcije ovog modela omogućavaju ulaz i izlaz među spojenim procesima, slično I/O
datotekama. Te I/O operacije sadrže detalje komunikacije na razini OS-a.
14. Skicirajte i ukratko objasnite paradigmu klijent-poslužitelj.
Klijent – poslužitelj model - dodjeljuje asimetrične uloge dvojima suradnim procesima. Jedan
proces, poslužitelj, igra ulogu davatelja usluge koji pasivno čeka na dolazak zahtjeva. Drugi,
klijent, isporučuje određene zahtjeve poslužitelju i očekuje njegov odziv. Klijent - poslužitelj
model omogućava učinkovitu apstraktnost usluga isporuke. Poslužiteljski proces osluškuje ima
li i prihvaća zahtjeve, dok klijentski proces izdaje zahtjeve i prihvaća odzive. Dodjeljivanjem
asimetričnih uloga dviju strana, pojednostavljena je sinkronizacija: poslužiteljski proces čeka
na zahtjeve, a klijent obrnuto očekuje odzive. Niz Internet usluga su klijent-poslužitelj
aplikacije. Te usluge često su poznate kao protokoli koje aplikacije uključuju - HTTP, FTP,
DNS, finger, gopher i drugi.
8
15. Skicirajte i ukratko objasnite P2P raspodijeljenu paradigmu.
Paradigma u kojoj se računalni resursi i usluge izravno izmjenjuju između računalnih sustava.
Ti resursi i usluge uključuju: izmjenu informacija, odradbene cikluse, pohranu u priručnu
memoriju, pohranu podataka na diskovne prostore i drugo… Računala koja se tradicionalno
koriste kao pojedinačni klijenti, komuniciraju izravno između sebe i mogu imati ulogu i
klijenta i poslužitelja, pretpostavljajući koja je od tih dvaju uloga najučinkovitija za mrežu.
Procesi koji sudjeluju u igraju jednake uloge, s jednakim mogućnostima i odgovornostima.
P2P paradigma više odgovara aplikacijama kao što su trenutna isporuka poruka (instant
messaging), P2P prijenos datoteka, video konferencije i kooperativni rad (CSCW). Aplikacije
mogu biti zasnovane i na klijent-poslužitelj i na P2P modelu.
Point-To-Point model poruka - Sustav poruka prosljeđuje poruku od pošiljatelja u red poruka
primatelja. Za razliku od osnovnog MP (Message passing) modela, posrednički sloj omogućava
pohranu poruka i omogućava odvojeno slanje i prijem poruka. Preko posredničkog sloja,
pošiljatelj deponira poruku u red poruka procesa primatelja. Proces primatelj izdvaja poruke iz
svog reda poruka i rukuje sa svakom zasebno. U usporedbi s osnovnim MP modelom, ova
paradigma omogućava dodatno apstrahiranje asinkronih operacija. Za postizanje istog učinka
osnovnim MP modelom, programer može koristiti niti ili procese - djecu.
9
Model poruka Izdavač/pretplatnik (Publish/Subscribe) - Svakoj poruci pridruženi su
određena tema ili događaj. Kada dođe do očekivanog događaja, proces objavljuje poruku
pozivajući događaj ili temu. Posrednički sustav poruka raspodjeljuje poruku svim
pretplatnicima. Publish/subscribe model poruka omogućava potpunu apstraktnost za
multicasting ili grupnu komunikaciju. Operacija publish omogućava procesu multicast prema
skupini procesa, dok operacija subscribe omogućava procesu osluškivanje tog multicast.
Remote Procedure Call (RPC) model omogućava takvu apstraktnost. U tom modelu, IPC odvija
se kao procedura, ili funkcija, poziv, koji su bliskima programerima aplikacija.
RPC zahtijeva dva nezavisna procesa, koji mogu ostati na odvojenim strojevima. Ako proces,
A, želi poslati zahtjev prema drugom procesu, B, izdaje poziv procedure prema B, a uz poziv
prosljeđuje listu s vrijednostima argumenata. Kao kod LPC (Local Procedure Calls), poziv
udaljene procedure okida predefinirani zahvat u proceduri omogućenoj od procesa B. Nakon
završetka procedure, proces B vraća vrijednost procesu A. RPC omogućava programerima
izgradnju mrežnih aplikacija koristeći programska načela slična LPC, dajući potrebnu
apstraktnost IPC i sinkronizaciji događaja.
10
18. Skicirajte i ukratko objasnite poziv udaljene metode (RMI).
RMI je objektno orijentirani ekvivalent od RMC (remote method call). Proces poziva metode
u objektima, koje ostaju na udaljenom domaćinu (remote host). Kao u RPC, argumenti se mogu
proslijediti pozivanjem.
Aplikacija izdaje zahtjeve prema object request broker (ORB), koji ih usmjerava prema
odgovarajućem objektu koji omogućava traženu uslugu.
Bliska je RMI modelu u pristupu udaljenim objektima, ali object request broker radi kao
posrednički sloj koji aplikaciji dozvoljava mogući višestruki pristup udaljenim ili lokalnim
objektima. Broker zahtjeva također može raditi kao posrednik prema raznorodnim objektima,
omogućavajući međudjelovanje među objektima koristeći razne API-je ili se pokrećući na
raznim platformama. Ova paradigma osnova je Object Management Group’s CORBA
(Common Object Request Broker Architecture) arhitekture.
11
20. Ukratko objasnite paradigmu prostora objekata.
Davatelj usluge smješta objekte kao dijelove prostora objekata, a tražitelji koji su pretplaćeni
na prostor, pristupaju tim entitetima. Kao dodatak apstrakcijama koje omogućavaju druge
paradigme, ova paradigma omogućava virtualni prostor ili sobu za sastanke između davanja i
zahtijevanja mrežnih resursa ili objekata. Ta apstrakcija sakriva sve detalje vezane za
specificiranje resursa i objekata, kao što su RMI, ORB ili mrežne usluge.
Mobilni agent je prenosivi program ili objekt. Agent je lansiran sa izvornog domaćina (host).
Putuje od domaćina do domaćina prema ruti na karti (itinerary) koju nosi. Pri svakom stajanju,
agent pristupa nužnim resursima ili uslugama i obavljaju zadatke nužne za obavljanje cijelog
posla. Paradigma omogućava apstrakciju prenosivog programa ili objekta. Tijekom izmjene
poruka, podatke nose programi/objekti koji putuju između sudionika.
12
22. Objasnite prednosti i nedostatke višenitnosti u raspodijeljenim računalnim sustavima.
Prednosti:
o Niti obično dijele adresni prostor – izmjene okoline za niti na jednom procesoru je
“jeftina”.
o Višenitni proces može se izvoditi transparentno na jednom procesoru ili na
višeprocesorskom sustavu.
o Niti koje surađuju mogu biti prirodni strukturni mehanizam nekih aplikacija.
o Implementiranje niti treba omogućiti samo obuhvaćenoj niti blokiranje sustavskog
poziva.
Nedostatak:
23. Ukratko navedite najbitnije detalje dizajna klijenta i detalje dizajna poslužitelja.
13
24. Skicirajte spajanje klijenta na poslužitelj korištenjem daemona i korištenjem
superposlužitelja.
14
25. Skicirajte način rada višennitnog poslužitelja organiziranog po modelu dispečer/radnik.
Migriranje koda – premještaj dijela posla(koda), može se načiniti s klijenta na poslužitelja ili
s poslužitelja na klijent. Klijent komunicira s poslužiteljem: klijent najprije dohvaća potreban
nužan programski kod, a zatim poziva poslužitelj (performanse, fleksibilnost).
15
Slika 1.13. Klijent - server
16
28. Skicirajte način međudjelovanja klijenta i poslužitelja kod asinkronog RPC-a.
17
30. Navedite osam koraka stvaranja raspodijeljene aplikacije korištenjem RMI-ja.
18
Programiranje socketa s UDP-om:
UDP: nema „konekcije“ između klijenta i poslužitelja
o Nema usklađivanja(handshaking)
o Pošiljatelj eksplicitno dodaje IP adresu i pristup odredišta
o Poslužitelj mora izdvojiti IP adresu i pristup pošiljatelja iz primljenih datagrama
UDP: prenošeni podaci mogu se primati proizvoljnim redom, ili izgubiti
S gledišta aplikacije: UDP omogućava nepouzdani prijenos bajta („datagrams“) između
klijenta i poslužitelja
19
Hijerarhijska organizacija usluge lociranja u domenama, pri čemu svaka ima pridružen
direktorijski čvor. Domena gornje razine predstavlja cijelu mrežu. Svaka domena podijeljena
je u višestruke manje domene, dok se čvorna domena kreira (npr. LAN).
Svaki entitet ima zapis u svakom nasljedniku u stablu domene (sve do korijena). Entitet ima
višestruke adrese, pa tako i višestruke pokazivače u različitim čvornim domenama.
20
34. Ukratko objasnite mobilne entitete s gledišta dodjeljivanja imena.
S obzirom da entitet može biti mobilan, potrebno je imati način pronalaska trenutnog na
temelju starog položaja. Prosljeđivanje pokazivača stvara povezanu listu koristeći (klijentsku i
poslužiteljsku krajnju točku) informacije (slika). Ako se entitet miče s položaja A na položaj B,
on u A ostavlja referencu na novu adresu.
Domaća (home) lokacija uvijek zadržava trag trenutne lokacije entiteta. Ako entitet nije na
kućnoj lokaciji, poruka je preusmjerena na trenutnu lokaciju i trenutna lokacija poslana je
klijentu za sljedeće poruke. [Mobile IP]
21
35. Ukratko definirajte pojmove: LDAP, UDDI i WSDL.
U raspodijeljenom sustavu, svaki stroj ima svoj vlastiti sat. U tom slučaju, događaj do kojeg
dođe poslije nekog drugog događaja, ne može se nikada pridružiti ranijem vremenu.
22
37. Ukratko objasnite pojam logičkih satova u raspodijeljenim računalnim sustavima s
osvrtom na lamportove satove
Kod promatranja logičkih satova moglo bi biti dovoljno da svaki čvor prihvati trenutno vrijeme
koje ne mora biti i stvarno vrijeme. Dva sustava mogu prihvatiti vremena po redoslijedu
događanja događaja u sustavu. Prema Lamportu, sustavi se mogu definirati kao zbirka procesa
koji komuniciraju izmjenom poruka. Svaki proces sastoji se od slijeda događaja. Relacija
„dogodilo se prije“ među događajima procesa može se izravno promatrati u dvije situacije:
Totalna uređenost može se pridružiti događajima ako možemo pretpostaviti pridruživanje broja
procesa događajima korištenima u tzv. prekidnom sustavu. Potrebno je odrediti način
pridruživanja vremena C(a) za događaj a, pri čemu je a → b tada C(a)<C(b). Uz to, vrijeme
sata C se može pomaknuti samo unaprijed.
Na slici a) su tri procesa, svaki sa vlastitim satom. Satovi otkucavaju različitim brzinama.
23
Slika b) : nakon izmjene poruka, logički satovi se korigiraju.
Centralizirani algoritam
24
Raspodijeljeno međusobno isključivanje: Ricart/Agrawala
Kada proces želi pristup resursu, šalje vremenski označenu poruku zahtjeva svim ostalim
procesima i čeka na OK od svih procesa. Kada proces primi zahtjev, on čini sljedeće tri stvari:
o Kada prijemnik ne pristupa resursu i ne želi mu pristupiti, šalje OK pošiljatelju
o Ako prijemnik već ima pristup resursu, on jednostavno ne odgovara i zahtjev se smješta
u red čekanja.
o Ako prijemnik želi pristup resursu, ali to još nije napravio, on uspoređuje vremensku
oznaku zahtjeva s onim koji je poslan, a najniži pobjeđuje (npr. 1, pa 2).
25
Raspodijeljeno međusobno isključivanje: Token Ring
Algoritam radi prosljeđivanje oznaka po prstenu. Kada proces ima oznaku, on odlučuje treba li
pristup resursima u to vrijeme. Ako treba, zadržava oznaku dok to ne obavi, a onda ga
prosljeđuje. Problemi ako se oznaka izgubi – teško za utvrditi.
26
Kada proces P uoči da trenutni koordinator više ne odgovara na zahtjeve, on inicira izbore:
P šalje ELECTION poruku svim procesima s većim brojevima.
Ako niti jedan ne odgovara, P dobiva izbore i postaje koordinator.
Ako neki od procesa s vecim brojevima odgovari, on dobiva. P’-ov posao je obavljen.
27
40. Navedite barem 3 mehanizma koji podržavaju paradigmu raspodijeljenih objekata
RMI aplikacije se često sastoje od dva odvojena programa koje se može opisati kao server i
klijent. Serverski program (server) kreira (udaljene) objekte, na raspolaganje drugim
aplikacijama daje reference na te objekte, te čeka na klijenta koji će aktivirati izvršavanje neke
od metoda objekata koji su na raspolaganju. Klijent dohvaća referencu na udaljeni objekt (ili
više njih) te inicira izvršavanje metoda na referenciranim objektima. RMI omogućava serveru
i klijentu da uspostave međusobnu komunikaciju te da na taj način obostrano razmjenjuju
informacije.
General Inter-ORB Protocol (GIOP) omogućava opći okvir za protokole koji se izgrađuju na
određenom transportnom sloju. ORB servis koji obrađuje zahtjev za udaljeni objekt. On
pronalazi udaljeni objekt u mreži, prenosi zahtjev objektu, čeka rezultate i kada su dostupni
vraća dobivene rezultate natrag na klijentu.
28
IIOP(Internet Inter-ORB Protocol)- omogućava komunikaciju između objekata koji koriste
različite isporučitelje. IIOP radi preko Interneta, odnosno preko bilo koje TCP / IP
implementacije.
44. Skicirajte model raspodijeljenog računala, te objasnite osnovnu razliku između grozda i
spleta računala.
Računala na kojima se izvode paralelni programi mogu biti umrežena računala lokalne mreže
(grozd) ili raspršena računala u Internetu (splet računala). Za razliku od grozda računala
koji je danas uobičajen, splet računala je model koji će zaživjeti tek budućnosti.
Grozd računala – skup računala povezana lokalnom mrežom. Značajke: manji broj računala i
veća brzina komunikacije
29
45. Ukratko objasnite osnovne modele (paradigme) paralelnih programa.
o Podatkovne strukture
o Primjena iste operacije na više elemenata
o programski jezik High Performance Fortran (HPC).
30
Uključi li se i broj procesora koji izvode paralelni posao, izraz postaje:
𝟏
𝑺= 𝒑
𝒔+ 𝑵
gdje je:
S – ubrzanje
s – vremenski udio instrukcija programa koje se ne mogu paralelizirati
p – udio instrukcija koje se mogu paralelno izvoditi
N – broj procesora na raspolaganju
48. Navedite i ukratko objasnite barem 2 tipa dekompozicije problema za rad na paralelnoj
platformi.
Domenska dekompozicija
o Podaci nad kojima algoritam radi dijele se u manje cjeline (obično podjednake veličine).
o Definiraju se zadaci koji su „zaduženi“ za odgovarajući dio podataka.
o U općenitom slučaju među zadacima je potrebno definirati neki oblik komunikacije.
Funkcionalna dekompozicija
o Prvo se izvodi podjela računanja, a zatim eventualna raspodjela podataka.
o U općenitom slučaju teže za izvesti i manje intuitivno.
o Primjer: algoritam pretraživanja stabla
31
49. Objasnite pojam funkcionalne dekompozicije problema prilikom prilagodbe serijskog
programa paralelnom izvođenju.
Funkcionalna dekompozicija – svaki zadatak dobije dio problema koji treba riješiti. Važniji
je računski dio koji treba izvršiti, nego podaci koji se koriste prilikom izvršavanja.
Paralelizacija algoritma:
Problem: Računala su različitih brzina -> potrebno je ujednačiti opterećenje skupom zadataka,
odnosno podjelom posla na broj dijelova jedna broju procesa i gdje master inicijalizira podatke,
šalje posao na zahtjev sluge i skuplja podatke dok worker dohvaća poslove i šalje rezultate
masteru.
Podaci povezani problemom se dijele. Svaki paralelni zadatak potom radi na dijelu podataka.
Proces gospodar: inicijalizira podatke o poslovima, šalje pojedinačni posao na zahtjev sluge,
skuplja podatke
Proces sluga: dohvaća poslove od gospodara i obavlja ih, šalje rezultate gospodaru
51. Navedite osnovne značajke nakupina računala (engl. Cluster), te ukratko opišite barem
3 vrste od njih.
Vrste:
1. Nakupine visokih performansi
2. S raspodjelom opterećenja – potreban velik broj računala da bi se dijelilo opterećenje
3. Visokoraspoložive nakupine – sprječavaju ispade usluga, sa zalihošću, uglavnom s
LB
32
52. Što je OpenMP i koje su njegove 3 glavne komponente?
3 glavne komponente:
Prevoditeljske smjernice
Varijable okoline
54. Objasnite i pokažite primjer korištenja smjerica (pragma) za paraleliziranja for petlje.
a[i] = b[i]+c[i];
#pragma omp parallel for smjernica obavještava programski prevoditelj da paralelizira petlju
koja slijedi(vanjsku). Kada programski kod naiđe na smjernicu #pragma omp parallel for broj
iteracije petlje je podijeljen između niti.
int omp_get_num_procs(void)
void omp_set_num_threads(int t)
33
56. Navedite opcije (klauzule) smjernice definiranja vidljivosti varijabli i pokažite primjer
uporabe iste.
Klauzule definiranja vidljivosti varijabli: private (jednu ili više varijabli učini privatnima u
odnosu na druge), shared, default, firstprivate, lastprivate, reduction
Primjer za private:
57. Objasnite mogućnosti redukcije (reduce) u OpenMP-ju i pokažite primjer korištenja iste.
34
58. Objasnite mogućnosti i opcije raspoređivanja u OpenMP-ju.
Vođeno raspoređivanje
Runtime raspoređivanje
Opcije:
59. Objasnite i na primjeru pokažite uporabu smjernica parallel, for, single, nowait i sections.
parallel pragma instruira svaku nit da izvodi cijelu kod unutar bloka
single pragma nalaže prevoditelju da samo jedna nit treba izvoditi blok koda koji prethodi
pragmi
nowait klauzula – smjernica parallel for zahtijeva sinkronizaciju na barijeri pri završetku, no
ako to nije potrebno koristi se nowait.
parallel sections pragma prethodi bloku k blokova koda koji se može istovremeno izvoditi od
stane k niti.
35
Primjeri:
#pragma omp parallel private(i,j,low,high)
for (i = 0; i < m; i++) {
low = a[i];
high = b[i];
if (low > high) {
#pragma omp single
printf ("Exiting (%d)\n", i);
break;
}
#pragma omp for nowait
for (j = low; j < high; j++)
c[j] = (c[j] - a[i])/b[i];
}
#pragma omp parallel sections
{
#pragma omp section
…
pragma omp section
….
}
Privatne varijable imaju svoje kopije na odvojenim memorijskim lokacijama, za svaku nit po
jedna.
Zajedničke varijable – sve niti mogu pristupati tim varijablama i mijenjati, sve varijable u
određenoj petlji dijele isti adresni prostor.
36
62. Navedite i ukratko objasnite 3 temeljne funkcije OpenMP okruženja.
omp_get_num_threads() – funkcija vraća broj niti koji se koriste u paralelnom dijelu koda
63. Objasnite pojam spleta računala (engl. grid) kroz postojeće definicije, te navedite barem
4 oblika upotrebe takvih sustava.
Vrsta paralelnom i raspodijeljenog sutava koji omogućuje dijeljenje, izmjenu, izbor i
nakupljanje zemljopisno raspodjeljenih autonomnik sredstava: računala, programi,
katalogizirani podaci i baze podataka, posebni uređaji, ljudi/suradnici.
37
65. Navedite i ukratko objasnite barem 4 usluge spleta računala.
Grid Information Service – učinkovita upotreba resursa temeljena na znanju o komponentama
sutava
66. Usporedite potencijal spleta računala sa strane njegovih potrošača i davatelja usluga.
Potrošači spleta računala: izvršavaju poslove s ciljem rješavanja problema raznih veličina i
složenosti; profitiraju mudrim korištenjem raspodijeljenih resursa; definiraju vremenske okvire
i cijenu korištenja
Davatelji usluga spleta računala: doprinose resurse za izvođenje poslova potrošača, profitiraju
povećanjem korisnosti resursa; definiraju lokalne zahtjeve i mogućnosti trgovine
67. Opišite što je Grid Service Broker (GSB) i navedite njegove glavne mogućnosti.
Broker za raspoređivanje zadataka aplikacija na temelju statičkih i dinamičkih parametara
spleta računala.
Mogućnosti:
A single window to manage and control experiment
Programmable Task FOrming Engine
Resource Discovery and Resource Trading
Optimal Dana Source Discovery
Scheduling and Predications
Generic Dispatcher and Grid Agents
Transportation of dana and sharing of results
Accounting
38
68. Navedite barem 3 primjera spleta računala u primjeni i ukratko ih opišite.
Primjer 1: Collaborative Engineering: rukuje dijeljenim prostorom sa simulacijskim
komponentama, višestrukim tokovima. Koristi Globus komunikaciju
Primjer 2: High-Throughput Computing: raspoređuje više nezavisnih zadataka. Globus
sigurnosni sutav, otkrivanje, pristup podacima, raspoređivanje
Primjer 3: Problem Solving Enviroment: Gobus usluge koriste se za prepoznavanje korisnika,
udaljeno podnošenje poslova, nadzor, upravljanje
70. Opisno usporedite (ili skicirajte) oblak računala s ostalim računalnim tehnologijama
slične namjene.
Dijele dosta zajedničkog: namjera, arhitekture, tehnologije
Razlike: programski model, poslovni model, model odradbe, aplikacije i virtualizacija
Problematika je slična:
Upravljanje raznim mogućnostima
Definiranje metoda kojima tražitelji usluga otkrivaju, zahtijevaju i koriste
resurse omogućene središnjim sustavom
često implementiraju paralelnu odradbu koja se odvija na tim resursima
Virtualizacija:
splet računala: svaka organizacija ima puni nadzor nad svojim resursima
oblak računala: neizostavni element svakog oblaka računala
39
71. Navedite i ukratko objasnite osnovne modele isporuke oblaka računala.
Model isporuke SaaS (Software as a Service): nema rukovanja sklopovljem ili programima;
usluge dostupne kroz preglednik; korisnici koriste usluge na zahtjev; trenutna skalabilnost
73. Što mora ispunjavati oblak računala da bi se mogao nametnuti kao optimalan izbor
mogućem korisniku?
Procesi, aplikacije i podaci moraju biti visoko nezavisni
Točke integracije moraju biti dobro definirane
Mora biti dopuštena nešto niža razina sigurnosti
Osnovna unutarnja građa sustava mora biti „zdrava“
Web mora biti priželjkivana platforma
Troškovi moraju biti bitni i značajnog iznosa
Mora se raditi o novim aplikacijama
40
74. Skicirajte građu Google App Engine-a i objasnite njegovu ulogu.
75. Što je Microsoft Windows Azure, čemu služi i koji su alati potrebni krajnjem korisniku
za njegovu upotrebu?
Microsoft Windows Azure je Internet-scale cloud usluga smještena u Microsot podatkovnim
centrima, koji osigurava operacijski sustav i skup razvojnih usluga koje se mogu koristiti
pojedinačno ili zajedno. Azure fleksibilna i interoperabilna platforma može se koristiti za
izgradnju novih aplikacija koje se izvode iz clouda ili za unaprijeđivanje postojećih aplikacija
sa cloud-based sposobnostima. Alati koji su potrebi: Windows Azure Software Development
Kit i Windows Azure Tools for MS Visual Studio.
76. Usporedite Amazon, Microsoft i Google po pitanju svojstava njihovih PaaS usluga.
41
77. Ukratko objasnite višeslojnu arhitekturu na webu zasnovanih sustava i skicirajte način
korištenja ČGI programa na poslužiteljskoj strani.
Poboljšanje COmmon Gateway Interface (CGI): standardni način kako web poslužitelj može
izvršavati program uz korisničke podatke kao ulaz na C strani i kad se kompletira šalje se na S
stranu.
42
Skripta na poslužiteljskoj strani: izvodi se na S kad se dokument lokalno dohvati; skripta se ne
šalje, već zamjenjje rezultatima izvođenja
Web sjedišta – troslojne arhitekture: web poslužitelj, poslužitelj apl i baza podataka
43
80. Objasnite osnove načina rada i načela REST (engl. Representational State Transfer)
arhitekture.
Način rada: Korisnik pristupom određenom resursu dobiva reprezentaciju resursa i dolazi u
stanje koje mu omogućuje izvođenje određenih aktivnosti, a nakon tog izvođenja prelazi u neko
drugo stanje.
Osnovna načela:
Korištenje HTTP metoda
Nema čuvanja stanja na poslužitelju, nego na klijentu
Strukturiranje aplikacije URI-jem
Prijenos poruka u XHTML, JSON ili XML formatu
81. Skicirajte i objasnite skalabilnu sadržajno osviještenu (engl. content-aware) nakupinu
web poslužitelja.
82. Opišite probleme postojećih računala visokih performansi sa stajališta potrošnje energije.
Veći računalni sustavi imaju računalno intenzivne aplikacije.
Disipacija topline, potrošnja energije, troškovi proizvodnje, troškovi programa
Znanstvenici pokušavaju smanjiti potrošnju energije, a korištenjem resursa na najbolji mogući
način profit raste.
Napredno upravljanje potrošnjom i zadacima
Zabrana: prečesto uklapanja i isklapanje energije, reduciranje frekvencije takta, presloženo
raspoređivanje
„Pametne aplikacije“, učinkovito programiranje, rekonfigurabilni prevoditelji
44
83. Navedite i opišite principe uštede energije procesora i radne memorije.
CPU:
DVFS – primarna tehnologija štednje energije na CPU
smanjenje struje, napona, frekvencije kada je korisnost ispod određenog praga
kada frekvencija pada -> pouzdanost raste
napon na kvadrat pada ako frekvencija pada -> učinkovitost energije na kubnu raste
Memorija:
CLTT i OLTT
frekvencija pada -> propusnost memorije pada
35% smanjenje ukupne potrošnje energije od strane memorije
propusnost memorije ograničena na 75%
60% potrošnje energije od strane memorije može se uštedjeti ako memorija nije
potrebna
45
Prevoditelji osvještene potrošnje (sloj 4, ali dobitci svih zelenih pristupa viših slojeva)
Nadzor resursa i predviđanje (slojevi 4, 3 i 2 (ovisi o obujmu nadzora preko HPC-a))
CBASE (sloj 4)
Doprinos programera (neizravno na svakom sloju, ali uglavnom na slojevima 4 i 3)
86. Definirajte pojam velikih skupova podataka (engl. Big Data), te navedite i ukratko
objasnite tri glavna izazova u tom području.
Big dana je izraz za zbirku skupova podataka koja je toliko velika da je teško obradiva koristeći
postojeće načine upravljanja i rukovanja bazama podataka i aplikacije za obradu podataka
3 glavna izazova:
1. Obujam podataka: 44x povećavanje od 2009. do 2020., eksponencijalno povećavanje
2. Raznovrsnost(složenost): relacijski, tekstualni, semi-strukturirani i grafički podaci,
tokovi podataka
3. Brzina: podaci se generiraju brzo, pa se brzo trebaju i obrađivati
46
89. Ukratko opišite način rada i navedite osnovne funkcije programskog modela MapReduce.
MapReduce runtime omogućuje raspoređivanje, raspodjelu podataka, sinkronizaciju, rukovanje
pogreškama, FS
Obično programer koristi: map, reduce, partition i combine
91. Navedite barem tri primjera raspodijeljenih računalnih sustava, te ukratko objasnite što
ih čini raspodijeljenima.
47
93. Navedite četiri faze razvoja paralelnog algoritma.
Četiri faze razvoja paralelnog algoritma su:
1. podjela (partitioning) – dekompozicija problema na manje cjeline (zanemaruje se broj
procesora i memorijska struktura fizičkog računala)
2. komunikacija (communication) – određivanje potrebne komunikacije među zadacima
3. aglomeracija (agglomeration) – skupovi zadataka i komunikacijskih kanala iz prve dvije
faze se, ako je to isplativo, grupiraju u odgovarajuće logičke cjeline (u cilju povećanja
performansi i smanjenja potrebe komunikacije)
4. pridruživanje (mapping) – svaki zadatak se dodijeljuje konkretnom procesoru; može biti
određeno a priori ili se dinamički mijenjati tijekom izvođenja
u prve dvije faze želimo postići istodobnost i skalabilnost, dok se lokalnost istražuje u
druge dvije
proces razvoja ne mora se odvijati slijedno nego i uz preklapanje i ponavljanje faza
48
95. Navedite datoteke zaglavlja koje moraju biti uključene u programskom kodu koji koristi
biblioteku MPI te u programskom kodu koji koristi biblioteku OpenMP.
Za C / C++: #include <mpi.h>
Fortran : INCLUDE 'mpif.h'
Za OpenMP u C/C++: #include <omp.h>
96. Napišite i ukratko objasnite dvije osnovne funkcije koje se moraju nalaziti u svakom MPI
programu u kojem će se koristiti MPI pozivi.
Svaki C/C++ program koji koristi MPI mora imati #include <mpi.h> preprocesorsku naredbu.
Dvije funkcije koje se moraju naći u svakom MPI programu su:
Inicijalizacijska rutina MPI::Init mora biti prva MPI rutina koja se poziva u MPI
programu. Ona postavlja MPI okruženje i vraća kod pogreške ako postoji problem.
Važno je naglasiti da se MPI::Init može pozvati samo jednom u programu. Argumenti
za MPI::Init su adrese od argc i argv, što su varijable koje sadržavaju argumente
komandne linije za program.
int MPI::Finalize()
MPI::Finalize() zadnja je MPI rutina koja se poziva u programu. Ona završava program
i čisti sve strukture podataka MPI okruženja, zaustavlja operacije koje se nisu završile,
itd. MPI::Finalize() moraju pozvati svi procesi, jer u suprotnom dolazi do blokiranja
programa. Nakon što se pozove MPI::Finalize() više se ne mogu pozivati MPI rutine
(uključujući MPI::Init).
MPI::INT - int
MPI::FLOAT - float
MPI::DOUBLE - double
MPI::LONG – long
MPI::SHORT – short
49
98. Napišite i ukratko objasnite funkcije slanja i prijema poruka blokirajuće komunikacije
od točke do točke, te njihove parametre.
void MPI::Comm.Send(const void *buf, int count, const Datatype& datatype, int dest, int
tag) const;
Funkcija blokira pozivajući process dok se ne završi process komunikacije. MPI::Send sadrži
slijedeće parameter: tijelo poruke (međuspremnik, količina i tip podatka) i adresni dio poruke
(odredište, oznaka i komunikator). Tijelo poruke sadrži podatke koji se šalju: broj podataka
određenog tipa. Adresni dio poruke određuje gdje se poruka treba poslati.
void MPI::Comm.Recv(void *buf, int count, const Datatype& datatype, int source, int
tag, Status& status);
Funkcija blokira pozivajući process dok se ne završi process komunikacije. Parametri funkcije
MPI::Recv slični su parametrima funkcije MPI::Send, ali se neki parametri koriste drukčije.
Tijelo poruke (međuspremnik, količina i tip podataka), adresni dio poruke (izvor, oznaka i
komunikator) i informacija o primljenoj poruci (status). Argumenti adresnog dijela poruke
određuju koje se poruke mogu primiti pozivom funkcije. Izvor, oznaka i komunikator moraju
odgovarati onima iz poruke na čekanju kako bi se poruka mogla primiti.
99. Napišite i ukratko objasnite funkcije slanja i prijema poruka komunikacije od točke do
točke bez blokiranja, te njihove parametre.
Slanje poruke bez blokiranja se obavlja funkcijom MPI::Isend. Deklaracija funkcije MPI::Isend
je:
request MPI::Comm.Isend(const void *buf, int count, const Datatype& datatype, int dest,
int tag) const;
Proces poziva MPI::Isend za početak slanja, ali bez blokiranja programa do završetka te
funkcije. Slijed pozivanja je sličan pozivanju kod blokirajuće komunikacije, ali uključuje
dodatni izlazni parameter – upravljački zahtjev. Upravljački zahtjev identificira operaciju slanja
50
koja je započeta (jer ih može biti više), a može se koristiti i za provjeru stanja započetkog
procesa slanja ili čekati završetak operacije slanja.
request MPI::Comm.Irecv(void *buf, int count, const Datatype& datatype, int source, int
tag);
Proces poziva funkciju MPI::Irecv da bi započeo primanje poruke, bez blokiranja ostatka
programa. Slijed pozivanja je sličan slijedu blokirajuće funkcije, ali parameter status zamijenjen
je s upravljačkim zahtjevom. Za upravljački zahtjev vrijedi isto kao kod funkcije MPI::Isend.
Niti jedan parameter predanih funkciji MPI::Irecv ne može se biti zapisan ili pročitan dok se ne
završi operacija primanja.
100. Koje su prednosti i nedostaci MPI komunikacije bez blokiranja u odnosu na blokirajuću
MPI komunikaciju?
Prednosti: selektivna upotreba funkcija bez blokiranja čini pisanje bez zastoja jednostavnijim,
MPI komunikacija bez blokiranja prikriva latencije
Nedostatci: korištenje komunikacije bez blokiranja može uzrokovati povećanu složenost koda,
što može dovesti do otežanog traženja grešaka i održavanja koda.
Funkcije za kolektivnu komunikaciju prenose podatke između svih procesa u grupi (grupa je
određena komunikatorom). Kolektivna komunikacija ne koristi mehanizam oznake poruke
prilikom slanja/primanja. Umjesto oznake, mehanizam se zasniva na redoslijedu izvršavanja
programa, te je potrebno osigurati da svi procesi izvrše poziv kolektivne komunikacije. Tipovi
kolektivne komunikacije:
51
o Redukcija
o Sinkronizacija na barijeri:
Funkcija MPI::Comm.Barrier() blokira proces koji ju poziva, dok god ostali procesi ne pozovu
istu funkciju. Kada program napusti funkciju MPI::Comm.Barrier(), svi procesi su
sinkronizirani na barijeri
102. Napišite i ukratko objasnite funkciju za razašiljanje poruke svim procesima, te njezine
parametre.
Funkcija koja se koristi za razašiljanje poruke svima procesima jeste MPI::Comm.Bcast. Svi
procesi koji sudjeluju u komunikaciji moraju pozvati MPI::Comm.Bcast. Deklaracija te
funkcije je slijedećeg oblika:
52
na barijeri. Međutim, treba napomenuti da MPI::Comm.Barrier sinkronizira procese, no ne
predaje i ne prenosi nikakve podatke. Stavivši prethodnu činjenicu na stranu,
MPI::Comm.Barrier se kategorizira kao jedna od rutina kolektivne komunikacije.
MPI::Comm.Barrier se odvija samo u softveru i može omogućiti velik dobitak na inače
utrošenom vremenu u nekim sustavima. Općenito, barijere bi se u kod trebale stavljati samo
ako su zbilja potrebne.
Poziv funkcije MPI::Comm.Barrier za programski jezik C++ izgleda ovako:
MPI::Comm.Barrier();
MPI::Comm.Reduce kombinira elemente koji se šalju, provodi zadanu operaciju nad njima
(zbroj, max, min, itd.), i vraća rezultat na odredište podataka matičnog procesa, gdje:
o su podaci koji se šalju određeni s parametrima: izvor_podataka, kolicina i
tip_podataka
o odredište podataka je definirano s: odrediste_podataka, kolicina, tip_podataka
o izvorišni i odredišni spremnici podataka imaju isti broj elemenata istog tipa.
Parametri kolicina i tip_podataka moraju imati identične vrijednosti u svim
procesima. Parametar rang, koji je lokacija rezultata nad kojim je izvršena redukcija,
mora također biti jednak kod svih procesa.
53
gdje su parametri:
izvor_podataka in adresa spremnika podataka koji se salje
odrediste_podataka out adresa odredisnog spremnika podataka
kolicina in broj elemenata koji se šalju (u međuspremniku slanja)
tip in tip podataka koji se šalju
operacija_redukcije in načina sažimanja podataka
rang in rang matičnog procesa
Comm in mpi komunikator
105. Pretpostavite da imate MPI kôd u programskom jeziku C++, datoteka je naziva
kod.cpp. Objasnite postupak pokretanja tog programa u MPI okruženju Linux temeljenog
OS-a, na 4 procesa. Kako biste pokrenuli program na samo 2 procesa?
2. Deklaracija varijabli
108. Kojom MPI funkcijom ćete dohvatiti broj procesa na kojima je program pokrenut?
54
velicina = MPI::COMM_WORLD.Get_size()
109. Kojom MPI funkcijom ćete dohvatiti rang procesa na kojem se izvršava kod?
rang = MPI::COMM_WORLD.Get_rank()
#include <iostream>
#include <mpi.h>
using namespace std;
int main (int argc, char* argv[]) {
int rang, velicina;
MPI::Init(argc, argv);
rang = MPI::COMM_WORLD.Get_rank();
velicina = MPI::COMM_WORLD.Get_size();
Svaki procesor ispisuje svoj rang, ali i ukupan broj procesa u komunikatoru
MPI::COMM_WORLD. Ako se pokrene na 3 procesa, izlaz je:
Procesor 2 od 3: Hello World!
Procesor 0 od 3: Hello World!
Procesor 1 od 3: Hello World!
...
if( mojrang == 0 )
{
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
}
else if( mojrang == 1 )
{
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 0, 17, status);
}
...
Proces ranga 0 slati će podatke a, veličine 100, tipa double, procesu 1, s oznakom 17. Proces
ranga 1, primit će podatke b, veličine 100, tipa double, od procesa ranga 0, s oznakom 17.
112. Pretpostavite MPI program koji se izvodi kroz 4 procesa. Jedan proces treba
55
poslati vektor od 50 elemenata svim ostalim procesima koristeći blokirajuću
#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char **argv)
{
MPI::INIT(argc, argv);
int rang, i, velicina;
MPI::Status status;
double a[50],b[50];
velicina = MPI::COMM_WORLD.Get_size();
rang = MPI::COMM_WORLD.Get_rank();
if (rang == 0)
{
for (i = 1; i < velicina; i++)
{
MPI::COMM_WORLD.Send(a, 50, MPI::DOUBLE, i, 17);
}
}
else
{
MPI::COMM_WORLD.Recv(b, 50, MPI::DOUBLE, 0, 17, status);
}
MPI::Finalize();
return 0;
}
56
113. Kako biste preuredili slijedeći kôd da proces 1 šalje ostalim procesima (može ih
...
if( mojrang == 0 )
{
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
}
else if( mojrang == 1 )
{
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 0, 17, status);
}
...
if (mojrang == 1)
{
for (int i = 0; i < brojProcesa; i++)
{
if (i != 1)
MPI::COMM_WORLD.Send(b, 50, MPI::DOUBLE, i, 17);
}
}
else
{
MPI::COMM_WORLD.Recv(a, 50, MPI::DOUBLE, 0, 17);
}
114. Ukratko opišite mehanizam slanja i primanja poruka u MPI okruženju (što se
Prilikom slanja izvor se implicitno određuje, dok ostatak poruke eksplicitno daje proces
pošiljatelj. Procesi obično imaju jednu ili više poruka koje su poslane, ali nisu još primljene
zbog toga što procesi slanja i primanja obično nisu sinkronizirani.
Da bi se poruka primila, proces određuje adresni dio poruke koju MPI uspoređuje s adresnim
dijelom poruka na čekanju. Ako se adresni dijelovi podudaraju, poruka se prima. Proces koji
prima poruku mora omogućiti spremnik unutar kojeg se može kopirati sadržaj poruke, i taj
spremnik mora biti dovoljno velik da u njega stane čitava poruka.
57
115. Kako biste preuredili navedeni kôd da ne dođe do zastoja?
...
if( rang == 0 ) {
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 1, 19, status);
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
}else if( rang == 1 ){
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 0, 17, status);
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 0, 19);
}
...
if (rang == 0)
{
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 1, 19, status);
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
}
else if (rang == 1)
{
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 0, 19);
MPI::COMM_WORLD.Recv(b, 100, MPI::DOUBLE, 0, 17, status);
}
116. Što će se dogoditi pri pokretanju sljedećeg dijela koda, i zašto, ako nigdje u kodu
...
if( rang == 0 ) {
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
}else if( rang == 1 ){
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 0, 19);
}
...
Ako je MPi kopirao poruku, tada je poziv Send funkcije službeno završen, iako
poruka još uvijek nije napustila proces koji je poruku poslao.
Nakon što su poslani pozivi slanja ili primanja pomoću funkcije bez blokiranja, proces koji je
poslao taj zahtjev treba način kako referencirati poslanu operaciju, tj. kako je identificirati
među ostalim operacijama istog tipa. Za tu svrhu MPI koristi rukovoditelje zahtjevima.
Funkcije za slanje i primanje bez blokiranja vraćaju rukovoditelj zahtjeva, koji se koristi za
identifikaciju poziva.
MPI::Request.Wait():
Proces koji je započeo slanje ili primanje pozivanjem rutine bez blokiranja, može
čekati da se započeta operacija izvrši, naknadnim pozivanjem funkcije
MPI::Request.Wait(). Parametri ove funkcije su: Request (rukovoditelj zahtjeva)
i Status (za funkciju primanja, informacija o primljenoj poruci, za slanje može
sadržavati kod pogreške.
void MPI::Request.Wait()
MPI::Request.Test():
Proces koji je započeo postupak slanja ili primanja pozivom funkcije bez blokiranja
može testirati je li ta funkcija završila pozivom funkcije Test. Parametri ove funkcije su
Request (rukovoditelj zahtjeva), Zastavica (ekvivalent logičkoj istini ako je operacija
slanja /primanja završena), Status (nije definiran ako je zastavica jednaka logičkoj
neistini, inače je jednaka kao i kod Wait funkcije.
59
119. Detaljno objasnite što će se dogoditi prilikom izvođenja sljedećeg programskog
koda
...
if( rang == 0 ) {
zahtjev1 = MPI::COMM_WORLD.Irecv(b, 100, MPI::DOUBLE, 1, 19);
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 1, 17);
zahtjev1.Wait(status);
}
else if(rang == 1 ) {
zahtjev2 = MPI::COMM_WORLD.Irecv(b, 100, MPI::DOUBLE, 0, 17);
MPI::COMM_WORLD.Send(a, 100, MPI::DOUBLE, 0, 19);
zahtjev2.Wait(status);
}
...
Proces ranga 0 započeti će s primanjem, poslati poruku i čekati završetak primanja. Proces
može obavljati druge zadaće dok čeka da primi poruku, pa tako da u međuvremenu procesu
ranga 1 šalje poruku. Kada dođe do dijela zahtjev1.Wait(statu), zaustavlja se ivršavanje koda
dok se ne završi primanje poruke.
Proces ranga 1 započeti će s primanjem, poslati poruku i čekati završetak primanja. Proces
može obavljati druge zadaće dok čeka da primi poruku, pa tako da u međuvremenu procesu 0
šalje poruku. Kada dođe do dijela zahtjev2.Wait(status), zaustavlja se izvršavanje koda dok se
ne završi primanje poruke.
komunikacije?
Kolektivna komunikacija uključuje slanje i primanje podataka između grupa procesa. Sve
migracije podataka između procesa mogu se ostvariti pomoću MPI funkcija „point-to-point“
komunikacije, no slijed nekih komunikacijskih operacija je toliko čest da je MPI standard
omogućio korištenje funkcija kolektivne komunikacije u takvim situacijama. Pozivi kolektivne
komunikacije ne koriste mehanizam oznake poruke prilikom slanja/primanja podataka.
Mehanizam se zasniva na redoslijedu izvršavanja programa, te je zbog toga nužno da programer
sam osigura da svi procesi izvrše poziv kolektivne komunikacije.
60
121. Koje izmjene je potrebno napraviti u sljedećem kodu, kako bi ga bilo moguće
...
MPI::Init(argc, argv);
rang = MPI::COMM_WORLD.Get_rank();
if(rang==5) param=23.0;
MPI::COMM_WORLD.Bcast(¶m, 1, MPI::DOUBLE, 5);
...
Nikakve, jer proces ranga 5 šalje podatak svim ostalim procesima koji se nalaze u komunikatoru
COMM_WORLD.
122. Kako biste izmijenili navedeni kod na način da svi procesi istovremeno pozivaju
funkciju Bcast?
...
if(rang==matProc) cout << „Maticni proces: “ << rang;
MPI::COMM_WORLD.Bcast(¶m, 1, MPI::DOUBLE, matProc);
cout << "P:" << rang << „, “ << param << endl;
MPI::Finalize();
return 0;
}
Kod nema potrebe mijenjati jer funkcija MPI::COMM_WORLD.Bcast() pozivaju svi procesi.
123. Navedeni kod nije ispravan, kako biste ga izmijenili da izbjegnete grešku?
...
if(rang==matProc)
MPI::COMM_WORLD.Bcast(&temp, 1, MPI::DOUBLE, matProc);
else MPI::COMM_WORLD.Bcast(&temp, 0, MPI::DOUBLE, matProc);
...
if (rang==matProc)
MPI::COMM_WORLD.Bcast(&temp, 1, MPI::DOUBLE, matProc);
else
MPI:COMM_WORLD.Bcast(&temp, 1, MPI::DOUBLE, matProc);
ili samo:
MPI:COMM_WORLD.Bcast(&temp, 1, MPI::DOUBLE, matProc);
61
124. Opišite što će se dogoditi nakon pokretanja navedenog isječka programskog
...
matProc = 4;
izvor = rang+1;
cout << "P" << rang << ": izvorisni podatak = " << izvor << endl;
if(rang==matProc)
cout << "P" << rang << ": rezultat = " << rezultat << endl;
MPI::Finalize();
return 0;
}
Svaki proces će ispisivati svoj izvorišni podataak (npr. proces 0 će ispisati izvorišni podatak 1,
proces 1 će ispisati izvorišni podatak 2, itd. i to zbog dijela koda izvor == rang+1). Proces ranga
4 tj. matični proces će skupiti sve izvorišne vrijednosti, uključujući i svoju, te ih pomnožiti i
spremiti u određenu varijablu. Matični pcroes će ispisati rezultat. Važno je napomenuti da se
tekstovi neće sinkronizirano ispisivati tj. neče se prvo ispisati izvorišni podaci svakog procesa,
a zatim rezutltat, nego će ispis biti izmješan jer nema sinkronizacije na barijeri zbog ispisa. Broj
procesa na kojima navedeni kod može pokrenuti je 5
62
125. Kako biste paralelizirali navedeni kod pomoću OpenMP-ja?
...
for(i=0; i<dim; i++) {
for(j=0; j<dim; j++) {
for(k=0; k<dim; k++) {
matrix3[i][j]+=matrix1[i][k]*matrix2[k][j];
}
}
}
...
omp_set_num_threads(br_niti);
#pragma omp parallel for
for (i = 0; i < dim; i++)
{
for (j = 0; j < dim; j++)
{
for (k = 0; k < dim; k++)
{
matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
...
#pragma omp parallel
{
cout << „Rezultat proracuna niti 4 jest: “ << rez << endl;
}
...
omp_set_num_threads(5);
int rang = omp_get_thread_num();
#pragma omp parallel
{
if (rang == 4) cout << "Rezultat proračuna niti 4 jest: " << rez << endl;
}
Kod mora biti pokrenut na minimalno 5 niti, zbog toga što kada stvorima niti i kažemo npr. da
ih stvori 4, on će rangirati brojevima od 0-3, a nama treba proces 4, pa ih zato moramo stvoriti
minimalno 5.
63
127. Što će i kako ispisivati navedeni dio programskog koda, ako je paralelni dio
...
#pragma omp parallel for private(x) ordered
{
for(i=0; i<sizeA; i++) {
x = workerFunction(i);
#pragma omp ordered {
cout << i << " " << j << x << endl;
}
}
}
...
Odredba ordered u prvoj liniji koda označava da se u petlji može pojaviti smjernica ordered.
Ordered smjernica unutar petlje označava početak dijela petlje koji se mora izvršiti prema
određenom redoslijedu. Dio koji je omeđen zagradama { i } će se izvoditi prema određenom
redoslijedu, NO TREBA PRIPAZITI DA SE SMJERNICA ordered NE POJAVI U ISTOJ
LINIJI S VITIČASTOM ZAGRADOM (to imamo u koda, pa je greška)!!!!!!!!!
dijela koda (prije uništavanja niti), ako u paralelnom izvođenju sudjeluju 2 niti?
...
int br = 4;
#pragma omp parallel for firstprivate(br)
for(i=1; i<=5; i++){
br += i;
}
...
64
129. Kolika će biti vrijednost varijable br neposredno nakon izlaska iz paralelnog
programske niti?
...
#pragma omp parallel for lastprivate(br)
for(i=1; i<=5; i++){
br = i;
}
...
Vrijednost varijable br će biti 5, zbog toga što na završetku petlje nit koja izvodi posljednju
iteraciju vlastitu vrijednost „lastprivate“ varijable kopira u glavnu nit.
130. Da li navedeni dio koda sadrži podatkovnu zavisnost, tj. uvjete utrkivanja (engl.
...
int i, j;
#pragma omp parallel for private(x)
{
for(i=0; i<width; i++) {
for(j=0; j<height; j++) {
x = workerFunction(i, j);
}
}
}
...
Ne postoji podatkovna zavisnost jer odredba „private“ dodjeljuje odvojene memorijske lokacije
kopijama varijable x za svaku nit.
65