Professional Documents
Culture Documents
Multi Core Porocesori
Multi Core Porocesori
Multi-core procesori
U računarskom inženjerstvu (computer engineering), tokom zadnjih četrdesetak godina, progresi
koji su bili učinjeni u domenu primene VLSI IC tehnologije uglavnom su bili iskazivani
postignutim inovacijama na polju razvoja arhitektura mikroprocesora nešto manje na polju
memorija, a neznatno u domenu ulaza-izlaza. Osnovni moto svakog napretka bio usmeren ka
ostvarivanju sledećeg cilja: Značajnijem poboljšanju performansi, (pri tome, brzina rada
predstavljala je ključni faktor u iskazivanju performansnih dobitaka skoro kod svakog elektronskog
dizajna). Iz brojnih razloga na koje ćemo, u tekstu koji sledi, nešto detaljnije ukazati, multi-core
(multiplecore) mikroprocesori ili chip-multiprocesori (CMP) su postali danas jedini dobar izbor koji
vodi ka realizaciji visoko-performansnih mikroprocesora.
Kao prvo, definisaćemo pojam: multi-core procesor ili tzv., procesor sa većim brojem jezgara
Multi-core znači da postoji više od jednog procesorskog jezgra, ili CPU-a, na jedinstvenom
integrisanom kolu (čipu). Tako na primer, dual-core procesor sadrži dva jezgra, quad-core procesor
četiri jezgra, eight-core osam, i td.
Many-core procesor je tip arhitekture kod koje je broj jezgara dovoljno veliki tako da tradicionalne
multiprocesorske tehnike koje su do sada poznate nisu više efikasne. Razlika izmedju multi-core i
many-core procesora pravi se na osnovu broja jezgara ugradjenih na čipu. Kada je broj jezgara veći
od nekoliko desetina tada kažemo da je to many-core, a kada je manji tada imamo multi-core
(danas, krajem prve decenije ovog veka, ako je broj jezgara manji od 20 tada kažemo da je taj
procesor tipa multi-core, a kada je veći za procesor kažemo da je tipa many-core). Mrežna
topologija kojom se vrši povezivanje jezgara u okviru many-core sistema bazira se na konceptu
Network-on-Chip (NoC), a ne na magistralama, krozbar-u, prstenu, i td.
Danas se multi-core procesori koriste u različite aplikacione domene uključujući: opšta namena (PC
mašine), embedded, mreže, digitalno signal procesiranje, grafika, multimedija, elektromedicina,
vojna industrija, i td.
Iznos dobitaka u performansama (performance gain) koji se može ostvariti kod multi-core
procesora jako je zavisan od softverskih algoritama i njihove implementacije. Tako na primer,
mogući dobici (gains) su ograničeni samo onim delom softvera koji se može paralelizirati radi
istovremeno (simultano) izvršenje na većem broju jezgara (ovaj efekat je opisan od strane Amdahl-
ovog zakona. Naime, delovi softvera koji se ne mogu paralelizovati izvršavaju se serijski na single-
procesoru pa zbog toga oni su ti koji definišu graničnu vrednost dobitka koji se može ostvariti, tj.
predstavljaju usko-grlo u ostvarivanju superiornijih performansi.
Teoretski posmatrano faktor-ubrzanja treba da je blizak broju jezgara, ali kod najvećeg broja
tipičnih aplikacija, zbog egzistencije programskih celina koje se moraju serijski izvršavati, velike
faktore ubrzanje je nemoguće postići. Ova činjenica ukazuje da paralelizacija softvera predstavlja
jedan ozbiljan problem koga u budućnosti treba uspešno rešiti.
1
No, vratimo se sada, sa malo unazad i ukažimo na razloge koji su proizvodjače čipova uslovili da
proizvodnju usmere ka multi-core rešenjima.
Prelazak sa single-core na multi-core rešenja diktiran je uglavnom fizičkim zakonima. Već duži niz
godina proizvodjači čipova fabrikuju i reklamiraju sve brže i brže mikroprocesore pri ćemu se
povećanje brzine njihovog rada prvenstveno oslanja na primeni sledećih rešenja:
a) povečanju taktne frekvencije; i
b) smanjenju dimenzija tranzistora.
Efekat smanjenje dimenzije tranzistora, kao prvo, dovodi do smanjenje potrošnje energije, a kao
drugo, povećava brzinu rada kola (kraće je propagaciono kašnjenje signala kroz kolo). No sada, sa
druge strane, povećanje taktne frekvencije implicitno ukazuje na brži rad, ali i na radikalno
povećanje potrošnje. Zadnjih godina čini se da su ovi VLSI tehnološki trendovi u razvoju
mikroprocesora (nalaženje dobrog balansa izmedju brzine rada i potrošnje) dostigli zasićenje pa su
projektanti arhitekture procesora bili prinudjeni da koriste razne domišljate trikove za postizanje
superiornijih performansi kakve su na primer sledeće:
• super-protočnost: svaka instrukcija prolazi kroz veći broj stepeni kako bi se brže izvršila,
• super-skalarnost: u toku svakog taktnog intervala inicira se izvršenje većeg broja instrukcija,
• predikcija-grananja: minimizira se efekat dugog uprotočavanja kod izvršenja instrukcija na
taj način što se unapred predvidja lokacija u programu na koju treba da se obavi grananje,
• preimenovanje-registara: u toku protočnog izvršenja instrukcija koriste se viruelni registri
kako bi se ostvarilo paralelno izvršenje u većem iznosu.
2
Slika 1 Performanse u odnosu na potrošnju kada je radna frekvencija parametar
Rezultati koji su prikazani na slici 1 su teoretske prirode i "lepo zvuče". No, isti pokreću sada jedno
ključno pitanje: Ako se sve to od ranije znalo zbog čega u prethodnom periodu nisu pokrenuti pravi
koraci ka postizanju superiornijih performansi? Zadovoljavajući odgovor na ovo pitanje bio bi
sledeći: Nije tačno da ova saznanja ranije nisu korišćena. Razlika izmedju prethodnog perioda i
današnjeg je u tome što se ranije, za postizanje superiornijih performansi, koristio veći broj čipova,
a ponekad i veći broj ploča (takva su bila standardna rešenja kod multiprocesorskih sistema na ploči
od sredine 80-tih do krajem 90-tih godina prošlog veka). Od pre nekoliko godina submikronska
VLSI IC tehnologija je omogućila da se na jednom čipu smesti veći broj jezgara, pa se ova
mogućnost danas u značajnoj meri koristi.
Sa hardverske perspektive, multicore predstavlja dobro rešenje. Veći broj MIPS-ova (milion
instrukcija u sekundi,) za manju potrošnju. Problem koji se sada javlja ogleda se u sledećem: Teško
je iskoristiti mogućnosti koje se pružaju, tj, postići bolje performanse i pored toga što izgleda da je
sve na "dohvat ruke". Da bi ozbiljno sagledali ovo prisetimo se sledećeg: Uvek kada se, u toku
proteklog perioda, neka nova generacija računara pojavljivala na tržištu, tehnikama koje su
korišćene u prošlosti, nije bilo neophodno menjati programski kôd, tj strukturu programa. Prosto
rečeno, programi su se izvršavali samo brže i brže na mašinama novijih generacija zahvaljujući pre
svega većoj brzini rada tih mašina. No kada u procesor ugradite veći broj procesorskih jezgara, tada
ako želite da ostvarite bolje performanse, neophodno je da program podelite na veći broj thread-ova
(niti), tj celina, koje će se paralelno izvršavati. Kod većeg, ako ne i najveći broj, embedded
aplikacija u datom trenutku procesor izvršava samo po jedan thread. To znači da ako dodate još
jedan procesor (core) drugo jezgro biće pasivno (idle), a prvo zapošljeno, pa kao krajnji efekat
performanse se neće povećati. Treba pri ovome uzeti u obzir i sledeću činjenicu: Klasični
programeri "ne vole" paralelno programiranje, tako da oni još uvek pružaju veliki otpor
neminovnim inovacijama u kreiranju programa koje će se u periodu koji nailazi postati veoma
aktuelne.
Evidentno je da izazov da se "ostvare što bolje performanse" kod multicore-a se može lakše
prebroditi kada aplikaciju čini veči broj paralelnih zadataka koji se simultano (istovremeno) mogu
izvršavati. No ipak treba naglasiti da generalno posmatrano, odredjivanje paralelizma u programu
predstavlja zaista težak problem.
Jedna posebno uspešna primena multicore-ova se ogleda u izvršenju specifičnih zadataka koji su u
prethodnom periodu bili dodeljivani hardveru akceleratorskog tipa. Tipičan takav hardver su
specijalizovani procesori, FPGA kola, i ASIC. S obzirom da se zadaci ovakvog tipa već izvršavaju
od strane posebnih funkcionalnih jedinica, problem paralelizma nije više tako izrazit jer je on na
neki način več rešen. Korišćenjem sada nekoliko sporih jezgara za čiji je rad potrebna manja
hardverska podrška (tj specifičan hradverski interfejs) kako bi se obavili ti specifični zadaci moguće
3
je postići (ostvariti) veoma dobre performanse. Ono što je najvažnije je to da je ovaj cilj lakše
ostvariti jer se njegova realizacija svodi na kreiranje programa koji će se izvršavati na multicore
procesoru, a ne na projektovanju specifičnog hardverskog akceleratora, tj aplikaciono specifični
procesor ili ASIC kolo.
Kao što smo već naglasili, performansni dobitak koji se postiže korišćenjem većeg broja procesora
je relativno lako postići kod nekih aplikacija, a skoro nemoguće kod drugih. Prvi korak u evaluaciji
(proceni) potencijalnih beneficija koje se kod nekog specifičnog uređaja/sklopa mogu ostvariti
primenom multiprocesiranja odnose se na određivanje (sagledavanje) koliko je pogodna ta
aplikacija za multiprocesiranje. Inicijalna analiza maksimalnog performansnog dobitka koji se može
ostvariti dostupnim paralelizmom može se odrediti primenom Amdahl-ovog zakona. Ovaj zakon
definiše da je maksimalno dostupno ubrzanej određeno procentom rada koji će se izvršiti serijski, a
ne paralelno.
Na slici 3 prikazani su rezultati koji se odnose na primenu Amdahl-ovog zakona za aplikacije koje
zahtevaju različiti iznos serijskog rada, i na sisteme koji koriste različiti broj procesnih jedinica
(core-ova). Analizom slike 3 može se zaključiti sledeće: Kada problem ili implementacija zahteva
(karakteriše se) mali iznos serijskog rada (procesiranje), tada postoji značajno performansno
poboljšanje ako se aplikacija implementira multiprocesiranjem, u suprotnom dobitak je minoran.
4
Slika 3. Primena Amdahl-ovog zakona
5
• savladati tehnike razvoja i debug-iranja softvera koje se odnose na okruženje koje omogućava
konkuretno izvršenje većeg broja poslova, procesa, i thread-ova,
• treba brzo uočavati i korigovati uslove-trka (race conditions), i samrtnih zagrljaja (deadlocks).
Race condition može da postoji u softveru, u slučajevima kada više od jedan thread koji se
tekuće izvršava ima pristup istim podacima. Ako ishod softverskog izvršenja zavisi od redosleda
u kome se određeni događaji dešavaju, tada kažemo da postoji race condition. Race condition
obično dovodi do toga (rezultira) da se promenljiva postavi na pogrešnu vrednost. Race
condition je teško detektovati, a takođe i debug-irati, iz razloga što je njihovo ponašanje
vremenski zavisno.
• potrebno je evaluirati i optimizirati performanse putem eliminacije uslih grla i neiskorišćenih
procesorskih ciklusa,
• optimizirati alokaciju procesora i drugih hardverskih resursa u skladu sa particijom softvera,
• implementirati korektni balans između deljivih i privatnih podataka.
6
Slika 4. Simetrični multiprocesorski sistem - SMP
Ovakav način razmišljanja može da dovede do određenih konfuzija (nejasnoća). Sa tačke gledišta
hardverskog domena, simetrični-multiprocesor je dizajn kod koga je svaki procesni element
identičan. Sa aspekta softverskog domena, simetrično-multiprocesiranje predstavlja mogućnost koja
se podržava od strane operativnog-sistema. Njen posao je da upravlja radom većeg broja procesora
jedinstvenom (single) instancom operativnog sistema koji je individualnim procesorima zadužen za
dodeljivanje (radi izvvršenja) procesa i thread-ova koji formiraju (čine) datu aplikaciju. Simetrično
multiprocesiranje se može jedino implementirati na simetričnom multiprocesoru. Ali takođe,
moguće je implementirati asimetrični multiprocessimg sistem koristeći simetrični multiprocesorski
hardver. Ako ova konstatacija već na neki način ne stvara zabunu (konfuziju) postoje takođe i
asimetrični multiprocesori u hardveru. Oni se razlikuju od simetričnih multiprocesora po tome što
poseduju različite tipove procesnih elemenata. Ako ste projektant softvera, lekciju koju treba znati
je sledeća: Kada neko govori o SMP ili AMP, treba se uveriti u to da li se njegova diskusija odnosi
na dizajn procesorskog hardvera, konfiguraciju sistemskog softvera, ili i jedno i drugo.
8
1.4.1 SMP hardver za AMP
U principu, SMP hardver obezbeđuje da jedinstvena (single) instanca OS-a upravlja radom resursa
svih SMP jezgara. No, SMP hardver se može takođe podeliti da obezbedi uslov kada se nekoliko
OS-ma izvršavaju na različitim jezgrima. I pored toga što je memorija deljiva, a vidi se kao
jedinstvena, ona se može podeliti (parcelisati) između različitih OS-ma koji se izvršavaju od strane
sistema – obezbeđujući uslove da se svaki OS izvršava nezavisno jedan od drugog. Na ovaj način
dobijamo AMP okruženje koje se izvršava na SMP hardveru.
Ilustracije radi, SMP koga čine dva jezgra se može podeliti na dve OS instance, pri čemu se po
jedno jezgro dodeljuje svakom okruženju. S obzirom da oba jezgra dele istu memoriju, svakom
jezgru se dodeljuje na korišćenje unapred definisani deo memorije, a pri tome se takođe i
opsluživanje periferije deli između oba OS-ma. MMU jedinica je ta koj ane dozvoljava da OS
jednog jezgra pristupi onoj memoriji čiji je vlasnik drugo jezgro. Kod SoC-ova sa dva jezgra i dva
OS-ma, RTOS je zadužen za ispunjenje RT aspekata AMP-a kakvi su brzina odziva, determinizam
u izvršenju zadataka, ispunjenje krajnjih rokova, i td., pri čemu on istovremeno koegzistira sa
GPOS-om koji je zadužen za rad sa sporim periferijama, opsluživanje korisnika, i dr.
Savremeni homogeni multicore SoC-ovi su veoma kompleksni sistemi jer poseduju znatno veći broj
mogućnosti u odnosu na ranije generaciej multicore sistema koji su bili implementirani pomoću
ASIC i FPGA kola koristeći IP-ove koji su bili bolje prilagođeni za uni-core, a ne za multicore rad.
Novija generacija multicore IP-ova, kakva je recimo ARM Cortex-A9 MPcore ima ugrađeno
specifičnu logiku i mogućnost da podrži rad kako simetričnih tako i asimetričnih okruženja. Pored
ostalog, novije generacije multicoreSoC-ova poseduju i višenivovsku keš memoriju, power-
management jedinicu, kontroler prekida, a takođe sadrže i IP blokove za umrežavanje, USB,
šifrovanje/dešifrovanje podataka, veći broj magistrala (SPI, I2C, PCI), LCD/touch panel logiku,
UART-e, tajmere, i dr., na jedinstvenom čipu sa većim brojem jezgara.
Sva nabrojana poboljšanja imaju značajan efekat na poboljšanje performansi novih multicore SoC
sistema.
Kao što smo već ranije naglasili rad SoC dizajna se može na takav način podeliti da obezbedi:
1. GPOS-u manipulisanje control-plane aktivnostima (korisničkim interfejsom, upravljanje
aplikacijom, upravljanje složenim protokolima), i
2. RTOS-u manipulisanje data-plane aktivnostima kakve su one koje se odnose na izvršenje
HRT zadataka (upravljanje radom motora, navođenje rakete, upravljanje avionom, vozom,
prihvatabnje podataka sa senzora, brza izračunavanje, vremensko kritično procesiranje,
šifrovanje/dešifrovanje, i dr.).
Kod ovakvih sistema Linux je obično OS-em koji se koristi kao izbor za GPOS, dok RTOS, kakav
je recimo, Nucleus predstavlja rešenje koje je pogodno za primenu kod vremensko kritičnih,
determinističkih i računsko intenzivnih aplikaicija. Na slici 6 prikazana je softverska arhitektura na
visokom nivou kod koje postoji jasno razdvajanje između control- i data-plane kod AMP-a.
9
Slika 6. Razdvajanje softvera kod multicore AMP SoC-a na control-plane i data-plane
OS-mi komuniciraju koristeći određeni metod IPC-a, koji se razlikuje od dizajna do dizajna. Danas
postoje različiti standardi za IPC-ove. Dva najčešće korišćenja standarda su:
a) Transparent Inter-Process Communication (TIPC) – to je u potpunosti transparentan i
heavy-weight IPC protokol koga podržavaju Linux i drugi OS-mi, i
b) Multicore Communication API (MCAPI) – je noviji pristup tipa light-weit message-passing
API koji se češće koristi kod distribuiranih SoC-ova.
Izbor IPC standarda je kritičan sa aspekta skalabilnosti AMP sistema, kao i lakšeg prenošenje
softvera kod ovih sistema. Drugim rečima, optimizacija IPC mehanizama između GPOS-a i RTOS-
a predstavlja ključni faktor za efikasan rad AMP sistema.
Na slici 7 prikazana je jedna tipična particija sistemskih resursa kod multicore SoC dizajna kada su
u sistem integrisana dva operativna sistema, GPOS i RTOS.
10
Slika 7 Jedna standardna particija sistemskih resursa kod multicore SoC dizajna
U fazi integracije sistema nailazimo na brojne probleme kojih treba uspešno rešiti. Neki od njih su
sledeći:
• Koji OS treba prvo boot-ovati, GPOS ili RTOS?
• Da li se na nivou sistema koristi boot-loader i koji je to?
• Na koji način će se izvešiti podela (particija) i zaštita memorije izmedju oba OS-ma?
• Na koji način se sistem može optimizirati ili podesiti za neku specifičnu platformu?
11
akceleratori kao posebna ASIC rešenja u okviru SoC-a, za izvršenje istog zadatka treba koristiti
veči broj core-ova koji softverskim putem treba da reše problem.
U skorije vreme, na nivou multocore SoC sistema koristi se i hypervisor koji ima zadatak da u
zavisnosti od trenutnih potreba dinamički dodeljuje resurse GPOS-u ili RTOS-u. Ovakvim rešenjem
postiže se veća efikasnost u radu sistema, ali ne treba izgubiti iz vida da je složenost hypervosor-a
dosta velika.
U suštini ne postoji jedinstveni dizajn pristup koji daje optimalno rešenje za svaki multicore i svako
multi-OS rešenje, ali je jedna konstatacija sigurno tačna, a to je da: Razvoj i realizacija uni-core
sistema u značajnoj je meri, ako ne i dijametralno, različita u odnosu na multicore.
Kod multicore sistema sa deljivom memorijom (shared memory systems) svi procesori mogu da
pristupaju ukupno raspoloživoj memoriji sistema na način kao da ona pripada jedinstvenom
globalnom adresnom prostoru. Deljivoj memoriji se obično pristupa preko magistrale, a
kontrolisani(upravljani) pristup se ostvaruje preko nekog sinhronizacionog (locking) mehanizma.
Imperativ pri ovome je da se izbegne istovremeni pristup nekoj lokaciji deljive memorije od strane
većeg broja jezgara (core-ova). Ovakav pristup u realizaciji omogućava da se koristi programski
model kod koga svaki procesor može da ima direktno pravo pristupa, radi čitanja ili upis, svakoj
lokaciji u okviru memorije. Deljiva memorija obezbedjuje da se prenos podataka vrši
referenciranjem (by reference), tj, bez aktuelnog premeštanja (kopiranje) podataka (moving data) sa
jedne lokacije na drugu. Sa druge strane, upravo ovakvo rešenje može da dovede da deljiva
memorija postane usko-grlo u radu sistema. Do ovakvih situacija dolazimo u slučajevima kada veći
broj procesora (jezgara) istovremeno pokušava da pristupi toj memoriji. Pojava uskog- grla sugeriše
da arhitektura memorije ne skalira dobro sa povećanjem broja procesora.
Kod sistema koji imaju distribuiranu memoriju svaki procesor može da pristupa samo svojoj
lokalnoj memoriji. Globalni memorijski prostor na nivou sistema u ovom slučaju ne postoji, a
komuniciranje se ostvaruje koristeći različite oblike (tehnike) prenosa-poruka (message passing).
Naime, svako jezgro ima svoju lokalnu memoriju koja nije deljiva, pa na taj način se može ostvariti
efikasna skalabilna arhitektura. Kada su nekom jezgru potrebni podaci koji se nalaze (čuvaju) u
drugom jezgru ili jezgrima tada je potrebno, prvo, da se postigne sinhronizacija u radu tih jezgara, a
zatim da se obavi fizičko kopiranje (premeštanje- move) podataka sa jednog jezgra na drugo. Pri
tome se kod kopiranja podataka ne koristi tehnika referenciranja, tj obraćanja memoriji, jer deljiva
memorija na nivou sistema ne egzistira. Prenos poruka može da bude asinhroni. To znači da dok
jezgro čeka da podaci pristignu ono može da obavlja neka druga izračunavanja. Alternativno,
prenos-poruka može biti sinhroni, tj zadatak koji čeka podatke se blokira sve dok traženi podaci ne
pristignu.
Ako multicore sistem istovremeno poseduje (ima dostupnu) kako lokalnu tako i globalnu memoriju
tada je moguće kreirati efikasne komunikacione strukture, koje mogu da kombinuju dobre osobine
obe prethodno pomenute tehnike za prenos podataka.
12
stopiranim napredkom u povećanju taktne frekvencije rada sistema (uzrok je tehnološke prirode), sa
jedne strane, i izuzetne procesne moći koje se nude od strane multicore sistema, sa druge strane,
došlo se do situacije kod koje: Serijsko izračunavanje “izumire“, a vizija za paralelno
programiranje, koja je počela da se razvija još pre četrdesetak godina postaje danas stvarnost.
Pojavom multicore čipova, bilo tipa hibridni-multicore ili manycore, paralelno izračunavanje
postaje neophodnost.
Prve industrijske MPSoC platforme, kakve su IBM Cell procesor (hibridni multicore), Texas
Instruments TI6476, ARM11 Mpcore,tradicionalni AMD i Intel multicore,many-core
AMD/ATI, Nividia grafičke procesne jedinicei dr., aplicirane kod embedded sistema su već
ugledale svetlost dana. Ove programibilne arhitekture karakteriše velika moć izračunavanja koja
predstavlja solidnu osnovu za buduće aplikacije. Osnovni problem koji se sada javlja je sledeći: Na
koji način projektanti embedded sistema mogu da iskoriste snagu-izračunavanja koja se nudi od
strane novijih generacija MPSoC-ova? Ovo pitanje se može preformulisati malo drugačije tako da
glasi: Koji programski model treba programer da koristi kako bi efikasno i produktivno programirao
savremene MPSoC arhitekture?
U širem smislu reči, programski model predstavlja skup softverskih tehnologija i apstrakcija koja
dozvoljavaju projektantu da prilagodi (uobliči) program ili algoritam na način koji je uskladjen sa
ciljnom arhitekturom. Ove softverske tehnologije postoje na različitim nivoima apstrakcije i
hijerarhijski su iznad programskih jezika, bibliotečnih programa, kompajlera, i runtime mapping
komponenata (superskalarnost, predikcija grananja, i dr.).
Evidentno je da projektanti ne mogu više da eksploatišu puni potencijal skalabilnosti MPSoC
platforme koristeći strogo (single) sekvencjalni pristup za opisivanje programa. Da bi se uspešno
eksploatisao potencijal MPSoC-a projektanti mora da koriste paralelni-programski model. To znači
da bi preslikao poželjno ponašanje na dostupne resurse projektant mora da reši sledeća četiri
zadatka:
Podeli program koga čini jedan (single) zadatak na veći broj računsko izbalansiranih zadataka koji
medjusobno mora sada da komuniciraju. Ovaj proces mora da uzme u obzir (vodi računa o) osobine
ciljne platforme (arhitekture sistema). Sama aktivnost koja se odnosi na particiju zadataka i dodele
opterećenja može često puta da bude uzročnik grešaka pa zbog toga mora u fazi razrade rešenja da
joj se posveti posebna pažnja. Pored toga, ova aktivnost zahteva proveru korektnosti balansa
opterećenja i verifikaciju rešenja pod različitim scenarijama, što za posledicu ima dugo vreme
razrade ideje i realizacije koncepta.
• Upravljanje komunikacijom izmedju zadataka i sinhronizacijom rada na nivou sistema.
Projektant mora pažljivo da sagleda ovaj problem kako bi premostio serijalizaciju
paralelnog programa i pojavljivanje race conditions. To su problemi koji prate koherentnost
podataka različitih thread-ova. Ponovo kod realizacije ove akcije postoji realna opasnost od
pojave grešaka, pa za uspešno rešavanje svih problema potrebno je dosta vremena, jer realno
postoji i opasnost od pojave samrtnih-zagrljaja (deadlocks).
• Manipulisanje sudarima kod pristupa on-chip resursima (deljiva memorija i deljivi sprežnmi
putevi) sa ciljem da se poboljšaju performanse dizajna.
• Debugging programa na multiprocesorskoj platformi, što je daleko izazovniji posao od
debugging programa na single-procesor platformi.
13
Za uspešno rešavanje svakog od pomenuta tri pristupa potrebno jevreme što u suštini kao krajnji
efekat ima poskupljenje realizacije.
Postoje četiri standardna načina pomoću kojih se može rešiti problem razvoja MPSoC-ova.
Prvi i najjednostavniji način koristi procesor opšte namene kao glavni procesni elemenat, a drugih
(heterogenih) procesora kao akceleratore. Ovo rešenje omogućava projektantu da kreira
sekvencijalni kod, a obezbeđuje da se koriste resursi MPSoC-ove platforme, što u suštini i ne
zahteva od projektanat aneke velike napore (zadatke opšteg tipa obavlja glavni procesor, a
specifične zadatke akcelerator). Ipak, ovaj pristup nije skalabilan jer je njegov potencijal (u toku
izvršenja programa) ograničen centralizovanom raspodelom resursa. Ako su akceleratorske funkcije
statički dodeljene tada ne postoji fleksibilnost u korišćenju resursa. Šta više, ovakvim pristupom ne
iskorišćeva se u potpunosti puni potencijal MPSoC platformi jer se veća brzina u izvršenju
programa postiže korišćenjem akceleratorskih mehanizama, a ne koristeći princip paralelnog
izvršenja. To obično znači da je napredovanje izvršenja glavnog programa zaustavljeno sve dok se
ne izvrše akceleratorske funkcije. Takođe, bez stvarnog paralelnog izvršenja problem koherencije
podataka ne egzistira.
Druga opcija se zasniva na sledećoj ideji: Kupiti komercijalni multiprocesorski RTOS (kakav je
Quadros RTXC/MP-RTOS) i koristiti njegove primitive kojima se ostvaruje komunikacija,
threading, i sinhronizacija. Sa aspekta embedded projektanta ova aktivnost uključuje deobu
sekvencijalnog koda na thread-ove putem delimičnog razvoja programa od njegovog početka i
delimičnog višestrukog korišćenja dostupnih sekvencijalnih kodnih sekvenci. Pored toga, projektant
mora da sagleda i manuelno insertuje interthread sinhronizaciju. Ova aktivnost predstavlja težak
problem za čije rešenje je potrebno vreme, Šta više, izabrani MP-RTOS se ponaša kao apstrakcioni
nivo koji se nalazi na vrhu hardverske MPSoC platforme. Naime, MP-RTOS ne može da reši sve
probleme koji se odnose na skalabilnost, fleksibilnost, i sudare oko korišćenja resursa, pa zbog toga
oni ostaju kao „briga“, tj. odgovornost za koju je zadužen projektant. Projektant mora biti svestan
da se hardverom rešava samo problem koherencije podataka.
Treća opcija se sastoji u kreiranju paralelnog threaded koda koristeći pomoć softverskih pomagala
kakvo je recimo Open MP. Jasno je da ovakav pristup utroška manuelnog rada u manjem iznosu, ali
je rešenje podložno greškama. Projektant mora posebnu pažnju da posveti rešavanju problema koji
se odnose na komunikaciju i sinhronizaciju između zadataka. Problemi koherentnosti i dalje
egzistiraju, a projektant mora da usvoji da će se oni rešiti od strtane hardvera, što je sa druge strane
skupo i neskalabilno rešenje. Sudari zbog korišćenja deljivih resursa i dalje ostaju problem, a takođe
i problem dodele kao i planiranje dodele resursa (resource scheduling). Obično za ove probleme
projektanti pretpostavljaju i usvajaju da će biti rešeni od strane RTOS-ma, ali kod realnih rešenja ne
postoji garancija da će se oni uspešno i korektno razrešiti.
Suština četvrte opcije se sastoji u sledećem: Projektant može manuelno da kreira paralelne threaded
kodove koji koriste eksplicitne komunikacije bazirane na prenosu poruka, MPI, ili koriste usluge
Portable Operating System Interface (Posix) biblioteke. To znači da je paralelizacija dodeljena kao
zadatak projektantu. Zbog ovoga, rešenje je podložno greškama iz razloga što projektant mora
eksplicitno da ubacuje delove koda za komunikaciju podacima, imajući u vidu osobine platforme sa
kojom radi. Koherencija podataka ne predstavlja više problem, ali ono što je važno istaći je to da ne
egzistira više koncept deljive memorije.
Nezavisno od toga koja je od prethodne četiri pomenute tehnike izabrana, krajnji cilj (rezultat)
projektanta MPSoC sistema se sastoji u preslikavanju ponašanaj rada sistema na procesne elemente.
Kako bi verifikovao da li je preslikavanja (mapping) sa tačke gledišta funkcionalnosti korektno i da
obavlja željenu funkciju, projektant mora da obavi veliki broj eksperimenata. Za slučaj da se željene
performanse ne mogu ostvariti on mora da izvede nov način preslikavanja (različiti paralelizam i
14
različita sinhronizacija). Naravno da se svakim ponavljanjem produžava vreme projektovanja.
Pored toga, garantovati da će kombinacija aplikacionih komponenata raditi korektno takođe
predstavlja težakk problem koga treba uspešno rešiti, jer projektant mora da koristi veliki broj
eksperimenata pomoću kojih će se kod različitih scenarija pokazati da je korišćenje resursa u svim
kombinacijama korektno, i da ne dolazi do konflikta kod njihovog korišćenja.
Rešenja bazirana na procesorima opšte namene jedva da mogu predstavljati pravi projektanski
izbor, a takodje da ispune gore-pomenute zahteve. Razlozi su sledeći: Sistemi opšte namene kod
kojih embedded proizvod treba da karakterišu visoke performanse, a istovremeno brza
prilagodljivost brojnim aplikacijama su dosta skupi, imaju veliku potrošnju, i nude mnogo više od
onoga što je potrebno ciljnoj aplikaciji.
15
na osnovu kojih savremene sisteme treba koncipirati. Površina na silicijumu i energetska efikasnost
su podjednako važni.
16
nezavisnih procesora i njihovo povezivanje preko deljive (shared) memorije.Arhitekture ovih
sistema slične su multiprocesorskim sistemima sa deljivom memorijom, a ono što je najvažnije je to
da one nude potencijalno rešenje problema nazvan ’zastoj u poboljšanju
performansi ’. Drugim rečima, broj procesora koji se može fabrikovati na jednom čipu i dalje
će se povećavati, shodno Moore-om zakonu to povećanje iznosi 40% godišnje, što znači da će se
broj procesora duplirati na svake dve godine. Kako če se broj procesora duplirati tako i broj
instrukcija koje će se izvršavati za period od jedne sekunde, bez povećanja taktne frekvencije, će se
povećavati. Ovo znači da će se i performanse dobro formulisanih paralelnih programa, shodno
Moore-om zakonu, takodje povećavati. Povećanje performansi dovodi do povećanja
funkcionalnosti računara, a time i do njihove šire primene u novim oblastima nauke i tehnike.
Na žalost, i pored četrdesetogodišnjeg iskustva, sa paralelnim računarima, danas postoji
relativno malo ’ dobro formulisanih ’ paralelnih programa. Razlog ovome je taj što
programiranje paralelnih računara je znatno teže od programiranja sekvencijalnih. Naime, paralelne
programe, u odnosu na sekvencijalne, je mnogo teže formulisati, a takodje je teže kreirati, i debug-
irati. Nedeterminističke greške (bugs) koje se javljau kod konkurentnih programa, je teško pronaći i
otkloniti. Deo ovih teškoća, pripisuju se egzotičnoj prirodi paralelnog programiranja, u koje se do
sada, od strane proizvodjača softvera, relativno malo investiralo, a takodje i relativno malo pažnje
posvećivalo u akademskim institucijama.
Teškoće na koje programeri nailaze kod kreiranja paralelnih programa u uskoj su vezi sa
konkuretnošću i nedeterminizmom.
17
dostupni. Šta više, ako jednom thread-u nedostaje (ne poseduje) dovoljno paralelizma da bi
održavao sve izvršne (funkcionalne) jedinice zauzete, tada drugi thread može da inicira izvršenje
instrukcije(a) na nezauzetom(im) jedinicom(ma).
Multithreading ne poboljšava performanse individualnog thread-a, jer on u suštini
ne povećava ILP (instruction level parallelism). Ali multithreading povećava
ukupnu sistemsku propusnost (system throughput) procesora, jer veći broj thread-ova
(multiple threads) mogu istovremeno koristiti raspoložive resurse procesora koji bi inače
bili pasivni (idle) za slučaj da se izvršava samo jedan (single) thread. Multithreading u
suštini nije skup za implementaciju jer on replicira samo programski brojač, PC, i RF polje
(register file- primera radi kod MIPS procesora RF polje čine ga 32 registra), a ne izvršne
(funkcionalne) jedinice (recimo, množače, deljitelje, FP jedinice, ALU-ove i dr.) i memoriju.
18
2. Realizaciji manycore arhitektura- ove arhitekture su prvenstveno namenjene za povećanje
sistemske propusnosti (system throughput) kod paralelnih aplikacija. Manycore
arhitekture se sastoje od većeg broja core-ova. Tipičan primer je NVIDIA GeForce GTX
280 grafička procesorska jedinica (graphic processing unit- GPU) koja se sastoji
od 240 core-ova. Svaki core podržava multithreading režim rada, in-order
(redosledno) izvršenje instrukcija, iniciranje izvršenja od jedne instrukcije po ciklusu
(single issue), a ima zajedničku upravljačku jedinicu i instrukcioni keš sa još sedam
drugih susednih core-ova.
Odnos performansi koji se može ostvariti koristeći multicore CPU i manycore GPU je
prikazan na slici 1.
Kao što se vidi sa slike 1 odnos vršnih performansi koje se odnose na FP (floating
point) izračunavanja izmedju manycore i multicore je reda 10:1 (teraflopls (1000
gigaflops) prema 100 gigaflops- važi za 2009 godinu).
19
Slika 2 CPU-ovi i GPU-ovi karakterišu različite dizajn filozofije
20
***************************************************************************
Primeri
Amdahl-ovim zakonom kreirani programi se vide kao fiksni (nešto što se ne može menjati),
a njihove promene (modifikacije), kada je u pitanju ubrzanje rada sistema, se izvode iskljućivo na
računarima (promena hardvera ili softvera). Medjutim najveći broj današnjih aplikacija ne izvršava
se na računarima od pre 20 godina, a šta više mali broj od tih aplikacija se izvršava i na računarima
koji su stari oko 10 godina. Ove aplikacije se ne odnose samo na video igre, nego na office
aplikacije, web browser-e, softver za obradu slike, DVD produkcija, softver za editovanje, i dr.
John Gustafson sa Sandia National Laboratories u svojim razmatranjima usvojio je jedan
različiti pristup u odnosu na Amdahl-a i predložio je njegovu reevaluaciju. Ideja reevaluacije se
sastoji u sledećem: Oučava se da kada se posmatra porast radnog opterećenja tada paralelizam
postaje znatno korisniji s obzirom da računari postaju moćniji i da oni podržavaju izvršenje
programa koji obavljaju više poslova, a ne fokusiraju se samo na fiksno radno opterećenje. Naime,
kod velikog broja problema, kako se obim problema povećava, serijska frakcija (deo) se smanjuje, a
paralelni deo brže raste od serijskog. To znači da sa povećanjem obima problema uticaj serijskog
dela se smanjuje, a shodno tome skalabilnost Amdahl-ovog zakona se poboljšava.
Da bi ilustrovali razliku izmedju Amdahl-ovog zakona i zapažanja Gustafson-a poslužićemo se
ilustracijama prikazanih na slici 1. Usvojićemo pri tome da program ćine pet celina P1, P2, P3, P4, i
P5 od kojih se svaka izvršava za po 100 vremenskih jedinica.
21
a) izvršenje programa bez paralelizma
Slika 1 Serijsko izvršenje programa, primena Amdahl-ovog zakona, primena zapažanja Gustafson-a
22
imamo viziju da radimo sa većim radnim opterećenjem. Savremene aplikacije više favorizuju
složenije i obimnije programe. Pri ovome treba istaći da se zapažanja Gustafson-a bolje uklapaju sa
ovakvim razmatranjima.
Skalabilnost aplikacije u direktnoj je vezi sa povećanjem posla koga treba obaviti paralelno i
minimiziranjem, ili smanjenjem, posla koga treba izvršiti serijski. Drugim rečima, Amdahl-ov
zakon motiviše nas da redukujemo serijski deo, dok Gustafson ukazuje da treba razmatrati obimnije
probleme, kod kojih je paralelni rad relativno veći u odnosu na serijski.
Zadatak 1
Neka program čine pet celina P1, P2, P3, P4, i P5, od kojih se svaka izvršava za po 100 vremenskih
jedinica, tp.
Primenjujući Amdahl-ov zakon odrediti ubrzanje koje se može postići u radu sistema ako se
programske celine P2 i P4 mogu paralelizovati tako da se mogu izvršavati na:
a) dual-core mašini,
b) quad-core mašini,
c) 300-core mašini.
Odogovor:
23
500t p
c) S 3 = = 1.7
200
300t p + tp
300
Skalabilnost programa predstavlja merilo koliko se ubrzanje uvećava ugradnjom novih jezgara u
sistem. Ubrzanje predstavlja odnos vremena izvršenja programa bez paralelizma u odnosu na vreme
kada se taj program izvršava paralelno.
Realno je očekivati (vidi sliku 2) da se izvršenje programa na sistemu sa dva procesorska jezgra
izvršava dvaput brže (slika 2a) na sistemu sa četiri procesorska jezgra četiri puta brže (vidi sliku
2b), itd. Na osnovu dobijenih rezultata smo zaključili da program ne skalira dobro iznad određene
tačke kada u sistem ugrađujemo (dodajemo) procesorska jezgra. Iznad te tačke javlja se overhead
zbog distribucije i sinhronizacije koja postaje sada dominantna.
Zadatak 2
Za odabranu mašinu predložena su tri nova arhitekturna poboljšanja kojima se mogu postići sledeča
ubrzanja.
a) S1 = 30
b) S2 = 20
c) S3 = 15
Ako je u datom trenutku moguće istovremeno implementirati samo po jedno ubrzanje, odrediti
ukupno ubrzanje Sp koje se može ostvariti u sva tri slučajeva. Neka je frakcija izračunavanja
f=0.9.
Odgovor
24
Savremena verzija Amdahl-ovog zakona kaže: Ako se poboljša frakcija izračunavanja f za faktor
ubrzanja S, tada će ukupno ubrzanje biti
Kada je f malo tada optimizacija nema efekat. Kada S→∞ tada Sp(f,S)≈ 1/(1 –f)
Kada n → ∞ tada
U konkretnom slučaju
a)
Sp(0.9,30)= 1 /(( 1 –0.9) + 0.9/30)
= 10,75
b)
Sp(0.9,20)= 1 /(( 1 –0.9) + 0.9/20)
= 6.89
c)
Sp(0.9,15)= 1 /(( 1 –0.9) + 0.9/15)
= 6.25
Zadatak 3
Za odabranu mašinu predložena su tri nova arhitekturna poboljšanja kojima se mogu postići sledeča
ubrzanja.
a)S1 = 30
b)S2 = 20
c)S3 = 15
i) Neka je u datom trenutku moguće implementirati sva tri ubrzanja. Ako se S1 i S2 mogu
implementirati na 25% od ukupnog vremena izračunavanja, tj na frakcijama f1 i f2, odrediti kolika
je vremenska frakcija f3 da bi se postiglo ukupno ubrzanje Sp= 10.
ii) Neka se poboljšanja mogu koristiti na 25 %, 35% i 10% od vremena za poboljšanja a), b) i c),
respektivno. Kolika je frakcija vremena za koju se ne vrši poboljšanje?
Odgovor
i)
Ako su f1, f2 i f3 vremenske frakcije na koje se odnosi poboljšanje, a S1, S2 i S3 su ubrzanja za ta
poboljšanja tada na osnovu Amdahl-ovog zakona imaćemo da je ukupno ubrzanje Sp dato sledećim
izrazom
25
Rešavajući po f3 dobićemo
f3= 0.45
ii)
fr = ((1 – f1 –f2- f3))* Tstaro / (( f1 /S1) + ( f2 /S2) + ( f3 /S3) + (1 – f1 –f2- f3))* Tstaro
fr = ((1 – 0.25 –0.35- 0.1))* Tstaro / (( 0.25 /30) + ( 0.35 /20) + ( 0.10 /15) + (1 – 0.25 –0.35- 0.10))* Tstaro
fr = 90 %
***********************************************************************
26