24
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA SEMINAR Višejezgrene Arhitekture Ivan Jukić Voditelj: Doc.dr.sc. Domagoj Jakobović Zagreb, svibanj, 2007.

Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

SSVVEEUUČČIILLIIŠŠTTEE UU ZZAAGGRREEBBUU

FFAAKKUULLTTEETT EELLEEKKTTRROOTTEEHHNNIIKKEE II RRAAČČUUNNAARRSSTTVVAA

SSEEMMIINNAARR

VViiššeejjeezzggrreennee AArrhhii tteekkttuurree

IIvvaann JJuukkiićć

VVooddiitteelljj:: DDoocc..ddrr..sscc.. DDoommaaggoojj JJaakkoobboovviićć

ZZaaggrreebb,, ssvviibbaannjj,, 22000077.

Page 2: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

2 | P a g e

Sadržaj

UVOD ........................................................................ 3

PROŠLOST ................................................................................................................................... 3

OD JEDNOJEZGRENIH DO VIŠEJEZGRENIH PROCESORA ......................................................................... 3

PLATFORME I ARHITEKTURE ...................................... 5

AMDAHLOV I GUSTAFSONOV ZAKON ................................................................................................ 5

SMP ARHITEKTURA ...................................................................................................................... 5

NUMA I ASMP ARHITEKTURE ...................................................................................................... 7

GPGPU ..................................................................................................................................... 7

CELL ......................................................................................................................................... 8

AMD I INTELL ............................................................................................................................. 8

PARALELNI ALGORITMI I RAZVOJNI ALATI .................. 9

PARALELNI ALGORITMI .................................................................................................................. 9

RAZVOJNI ALATI ......................................................................................................................... 10

Compositional C++ ............................................................................................................ 10

MPI .................................................................................................................................... 12

RapidMind ......................................................................................................................... 12

RAY TRACING U STVARNOM VREMENU ................... 19

UVOD U RAY TRACING ................................................................................................................ 19

RAY TRACING U STVARNOM VREMENU .......................................................................................... 19

ZAKLJUČAK .............................................................. 21

LITERATURA ............................................................ 22

SAŽETAK .................................................................. 23

Page 3: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

3 | P a g e

1. UVOD 1.1. PROŠLOST

20. srpnja 1969. godine prva letjelica sa ljudskom posadom sletjela je na Mjesec. Računalo

koje je tada asistiralo kod spuštanja imalo je za to vrijeme nevjerojatnih 1000 KHz, tj. 1 MHz.

Od tada, računalna snaga i brzina rada centralne procesorske jedinice napredovala je za

svjetlosne godine. Tijekom godina bilo je mnogo skepticizma oko razvoja računala i njihove

snage, od toga da neće nikada doseći 20 MHz do toga da neće prijeći preko 1 GHz.

Jedan od osnivača Intela, Gordon E. Moore, davne 1965. dao je jedan od danas najpoznatijih

zakona vezanih uz broj tranzistora u integriranim krugovima. Taj zakon, poznat kao Mooreov

zakon, kaže da će se svakih 24 mjeseca broj tranzistora u integriranim krugovima, uz

minimalne troškove komponenti, udvostručavati. Danas mnogi misle da se to odnosi na

svakih 18 mjeseci, ali kako je sam G. Moore rekao, to se ipak odnosi na svaka 24 mjeseca.

“ Složenost, uz minimalne troškove komponenti, povećava se približno za faktor dva po

godini... Zasigurno, tijekom kraćeg perioda vremena, možemo očekivati da će se ovakav

trend nastaviti, ako ne i još dodatno povećavati. Tijekom dužeg razdoblja, trend povećanja

složenosti ne možemo sa sigurnošću odrediti, iako nema razloga da ne vjerujemo da se neće

promijeniti u sljedećih 10 godina. To znači da će do 1975. broj komponenti po integriranom

krugu uz minimalne troškove biti 65 000. Vjerujem da se tako veliki krug može napraviti na

jednoj pločici.“

Danas su stvari drugačije, znamo da je granica daljnjeg povećanja snage procesora približno

dostignuta, više ne možemo očekivati da ćemo se moći pouzdat u Mooreov zakon, ili ipak

ima drugih stvari na koje bi mogli primijeniti taj zakon?

1.2. OD JEDNOJEZGRENIH DO VIŠEJEZGRENIH PROCESORA

Dok se proizvodna tehnologija sve više i više razvija, fizička ograničenja mikroelektroničkih

elemenata baziranih na poluvodičima postala su jedna od glavnih briga u dizajniranju

računalnih komponenti. Neki od efekata tih fizičkih ograničenja su velika disipacija topline

(problem zagrijavanja) i problemi sinkronizacije podataka (gubitak podataka). Potreba za sve

više kompleksnim i sposobnim procesorima dovela je proizvođače procesora do toga da

različitim metodama ostvare ciljeve. Zato se danas javljaju višejezgreni procesori. U sljedećih

nekoliko godina nesumnjivo je da možemo očekivati konstantno povećanje broja jezgri na

jednom čipu. Sada se javlja prilika za ponovnu upotrebu Mooreovog zakona, ali u smislu

povećanja broja jezgri, a ne tranzistora, no u kojem vremenskom periodu ostaje nepoznato.

Također je za očekivati da će razvoj arhitekture procesora pratiti i mogućnosti njihovog

programiranja, jer puno jezgri u procesoru ne znači ništa ako nemamo programsku podršku

optimiziranu za izvođenje na takvim procesorima.

Page 4: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

4 | P a g e

Danas je trend takav da imamo 'višejezgrene procesore' (multi- core processors, [8]) sa dvije,

četiri, osam jezgri, ali to se kreće prema 'punojezgrenim procesorima' (many- core

processors) koji će imati desetke ili stotine jezgri, ma kako god da nam se danas to

nevjerojatno činilo. Višejezgreni čipovi kombinirani sa simultaneous multithreading-om ili

hyperthreading tehnologijom [7], te jezgre posebne namjene (npr. graphics-processor ili

phisycs-processor), pokazuju svjetlu budućnost za dobitke u performansama.

Page 5: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

5 | P a g e

2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON

Prije samog ulaza u temu trebalo bi spomenuti dva zakona koja su direktno vezana uz

višejezgrene procesore i paralelizaciju algoritama. Prvi od tih je Amdahlov zakon [1], nazvan

prema arhitektu računala Geneu Amdahlu. On kaže da je ubrzanje izvođenja programa na

višejezgrenim i višeprocesorskim sustavima ograničeno sekvencijalnim dijelovima programa.

To znači, ako je pola programa sekvencijalno, očekivano ubrzanje iznositi će najviše dva bez

obzira na to koliko se jezgri ili procesora koristi. Generaliziran Amdahlov zakon (1):

(1)

kP = postotak instrukcija koje se mogu ubrzati (ili usporiti)

kS = množitelj ubrzanja (gdje je 1 bez ubrzanja i usporavanja)

n = broj različitih ubrzanja/usporavanja u odnosu na promjenu sustava (zamijenili

jednojezgreni procesor višejezgrenim)

Drugi zakon, u računalnom inženjerstvu, je Gustafsonov, ili još se naziva Gustafson-Barsis

zakonom [6]. On kaže da se bilo koji dovoljno velik problem može efikasno paralelizirati i

direktno je vezan uz Amdahlov zakon. Prvi ga je opisao John L. Gustafson 1988. godine.

Generaliziran Gustafsonov zakon (2):

(2)

P = broj procesora

S= ubrzanje

α = udio instrukcija koje nije moguće paralelizirati

2.2. 'SMP' ARHITEKTURA

Danas najkorištenija arhitektura višejezgrenih procesora je symmetric multiprocessing (SMP)

arhitektura [13]. Glavna karakteristika te arhitekture jest da su dvije ili više identičnih jezgri

spojene zajedno na zajedničku glavnu memoriju ( L2 Cache najčešće), ali u isto vrijeme imaju

i vlastitu memoriju (L1 Cache) što je prikazano na slici 1. Ovakva arhtektura omogućava bilo

kojoj jezgri da obavlja bilo koji posao nad podatcima bez obzira na to gdje se oni u memoriji

nalazili. Uz pravilnu potporu operacijskog sustava (ona mora biti posebno implementirana),

sistemi zasnovani na SMP arhitekturi mogu lagano prebacivati zadatke između jezgri i tako

balansirati iskoristivost. Ako potpora nije implementirana, tada drugi procesor ostaje

∑=

n

k k

k

S

P

0

1

( ) ( )1* −−= PPPS α

Page 6: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

6 | P a g e

neiskorišten cijelo vrijeme i cijeli se sustav ponaša kao jednoprocesorski.

Slika 1 - Pojednostavljen prikaz SMP arhitekture

Software koji je posebno prilagođen za SMP sustave može imati veliku dobit od tog sustava.

Međutim ipak ima i slučajeva u kojima se zasad ne može očekivati poboljšanje performansi

(npr. u video-igrama gdje bi se morale raditi po dvije verzije , za jedno i više-procesorske

sustave). Programi koji su pisani za jednoprocesorske sustave, a pokreću se na SMP

sustavima, dobivaju na povećanju performansi iako nisu pisani za njih. Ta se, zapravo malo

poznata činjenica, događa zbog hardverskih prekida (hardware interrupts) koji suspendiraju

izvođenje programa iz određenog razloga i dok se jezgra operacijskog sustava bavi obradom

prekida, program nastavlja izvođenje na onoj jezgri koja se nije koristila. Zbog toga se kod

nekih aplikacija, a specijalno prevoditelja, može primjetiti poboljšanje performansi za faktor

koji je približan broju dodatnih jezgi.

Isto tako se u nekim slučajevima osjeća i gubitak performansi, i to u slučajevima kada se u

SMP okolišu nalazi puno različitih procesa. Danas se programi razvijaju tako da rezerviraju

vrijeme kad će se izvesti zato da se korisno vrijeme rada procesora maksimalno iskoristi. Ako

program rezervira izvođenje na jednoj jezgri, a druga jezgra postane slobodna prije, on i dalje

čeka da se oslobodi prva. Zato su danas kvalitetni software-ski paketi rađeni tako da dosežu

maksimalne mogućnosti rezervirajući svaku jezgru zasebno.

Još jedan od problema koji se javlja kod ovakvih sustava vezan je uz koherenciju podataka, tj.

kada se u L1 cache-u prve jezgre nađe skup podataka koji čekaju na obradu, uzet iz

zajedničke memorije prve i druge jezgre, ali nakon što su podatci preuzeti druga jezgra je

promijenila te podatke u zajedničkoj memoriji, što znači da će prva jezgra obraditi podatke

koji zapravo više ne postoje. Protokol usklađivanja priručne memorije [2] je namjenjen

rješavanju ovakvih problema. U računarstvu se time obilježava pojam vezan uz integritet

Page 7: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

7 | P a g e

podataka pohranjenih u lokalne cache memorije te zajedničke dijeljene memorije. Postoji

mnoštvo protokola i modela za usklađivanje priručne memorije (MSI protocol, MESI,

MOESI...), ali njih nećemo objašnjavati.

2.3. 'NUMA' I 'ASMP' ARHITEKTURE

Postoje još dvije značajnije arhitekture danas. Prva je NUMA (Non – Uniform Memory

Access). Karakteristika ove arhitekture je da različtim jezgrama pridjeljuje različite

memorijske spremnike i time im dopušta da pristupaju memoriji paralelno (istovremeno).

Ovo može drastično povećati tok podataka sve dok su podatci za određeni proces smješteni

u odgovarajućem spremniku. Problem se javlja kada treba prebaciti podatke iz jednog u

drugi spremnik (npr. podatak potreban za izvođenje procesa na prvoj jezgri nalazi se u

memorijskom prostoru druge jezgre). Zbog toga je ova arhitektura ograničena na određene

radne zadatke, njena je dobra iskoristivost u server računalima gdje su podatci vrlo često

čvrsto povezani sa određenim procesom od korisnika. Koristi se i u izgradnji vrlo velikih

superračunala.

Druga arhitektura je asymmetric multiprocessing (ASMP) gdje se odvojene specijalizirane

jezgre koriste za različite zadatke i gdje nije sva memorija dostupna svim jezgrama. Ova

arhitektura nije široko korištena niti podržana (iako 3D čipsete možemo nazvati nekom

vrstom ASMP – a), ali neki ipak vide budućnost upravo tu, kada ćemo na jednoj pločici dobiti

CPU (central processing unit), GPU (graphics processing unit) i PPU (physics processing unit).

2.4. GPGPU (General Purpose Computing on GPU)

Možda se nama pojam višejezgrenih procesora čini novim, međutim sama pojava takvih

procesora nije nova. Već dugo vremena grafički procesori [5] imaju i puno više od osam,

nazovimo ih tako, jezgri. To nisu jezgre u smislu višejezgrenih procesora opće namjene, već

one su bliže posebno namjenjenim jedinicama (stanjima) grafičkog procesora u cjelini. Zato

ih ne nazivamo procesorima, već shaderima. Tako razlikujemo vertex i pixel shadere.

Današnji najnoviji grafički procesori, sa podrškom sa Microsoftov DirectX10, imaju najviše po

128 jednih i drugih shadera. Zbog njih i velike aritmetičke preciznosti cijevovoda za

renderiranje (rendering pipeline) grafičkog procesora u novije vrijeme javila se ideja za

izvođenjem proračuna opće potrebe na grafičkim procesorima [4]. Vertex i pixel shaderi

dodani su kako bi se programerima omogućio prikaz još realističnijih efekata u

videomultimediji. Upravo zbog velike fleksibilnosti njihovog programiranja i brzog razvoja

omogućeno je da se izvode proračuni šireg spektra osim onih vezanih uz grafiku. Danas je

već ova upotreba grafičkih procesora našla svoj put u područja kao što su istraživanja vezana

uz naftu, znanstveno procesiranje slika, pa čak i u predviđanje cijena dionica na burzama.

Zbog toga postoji velik pritisak na proizvođače grafičkih čipova za stalnim poboljšanjem

hardware-a i povećanom fleksibilnošću.

Page 8: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

8 | P a g e

2.5. CELL

Još jedan procesor moramo spomenuti čije vrijeme, zasigurno, tek dolazi, a to je Cell

procesor [18]. Cell je nastao kao dio suradnje Sony-ja, Toshibe i IBM-a i zamišljen je da se

implementira u sve od potrošačke elektronike (mobiteli, PDA, HDTV televizori, HD

videokamere, kućna računala...) pa do superračunala. Zasad je na tržištu dostupan u Sony-

jevom PlayStation-u 3. Također je zamišljena i kooperacija Cell procesora, tako npr. ako

imamo Cell procesor u televizoru, računalu i PS3 oni mogu međusobno surađivati i tako

riješavati određene probleme. Prema IBM-u, Cell je pokazao poboljšanje performansi u

odnosu na druge tržišne procesore i do deset puta, iako to nije ništa novo jer su iste, ako ne i

bolje rezultate pokazivali grafički procesori na ne-grafičkim aplikacijama. Prototip Cell

procesora ima devet jezgri, u PS3 ugrađuje se inačica sa osam, dok će se u potrošačkoj

elektronici nalaziti varijanta sa šest jezgri. Jedna od njih zove se PPE (Power Processor

Element) i temelji se na IBM-ovoj Power arhitekturi. Njegova je zadaća da raspodijeli zadatke

između ostalih jezgri i da se brine za low-level zadatke operacijskog sustava. Prava akcija

odvijat će se na ostalim jezgrama koje se nazivaju SPEs (Synergistic Processor Elements). To

su vektorski procesori, što znači da mogu obavljati više operacija istovremeno sa jednom

instrukcijom. Oni djeluju kao posebni procesori, svaki SPE je teoretski sposoban za obavljanje

32 milijarde operacija u sekundi sa pomičnim zarezom, za njih osam to iznosi

32×8 = 256 GFLOPS na taktu od 4 GHz, što je u rangu nekih superračunala☺.

Još su dvije zanimljivosti vezane uz Cell. Prva je da se SPEs mogu povezati i tako tvoriti

stream processor. Stream procesor uzima podatke i obrađuje ih u nizu koraka. Na ovaj način

bi Cell teoretski mogao doseći performanse od 256 GFLOPS-a. Druga zanimljivost je da su

SPEs povezani preko širokopojasne sabirnice čije su mogućnosti prijenosa podataka nekoliko

stotina gigabajta u sekundi, dok se kod uobičajenih procesora to mjeri u desetcima. Ovo je

dosta malo podataka o tom procesoru, ali sve u svemu Cellove su mogućnosti vrlo velike, a

na programerima će biti odgovornost da se one sve iskoriste.

2.6. AMD I INTEL

Što se tiče danas dva nazastupljnija proizvođača procesora, oba većinom koriste SMP

arhitekturu, sa sitnim razlikama u proizvodnom procesu, energijskoj učinkovitosti i samim

dodatnim karakteristikama procesora. Iako je AMD prvi izbacio višejezgreni procesor opće

namjene, AthlonXP X2, Intel ga je i više nego uspješno zasjenio sa svojim Core Duo, Core 2

Duo i Quad Core procesorima većom iskoristivošću i kompatibilnošću, manjim proizvodnim

procesom (65 nm u odnosu na 90 nm) i manjom potrošnjom energije. AMD se sa nedavnom

kupovinom ATI-ja nada u stvaranje hibrida CPU i GPU procesora i tako staviti GPGPU u novu

perspektivu.

Page 9: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

9 | P a g e

3. PARALELNI ALGORITMI I RAZVOJNI ALATI 3.1. PARALELNI ALGORITMI

Kako bi se neki program mogao učinkovito izvoditi na višejezgrenom procesoru on mora biti

paraleliziran. U računarskoj znanosti paralelni algoritmi [3, 10, 11] se nalaze nasuprot

serijskim. To su zapravo programi koji se mogu podijeliti u manje dijelove i izvoditi dio po dio

na mnogo različitih procesora (jezgri), na kraju se ponovno sastaviti te dobiti točan rezultat.

Neki se algoritmi mogu lagano i učinkovito paralelizirat (npr. algoritam provjere brojeva od 1

do 100 000 da nađemo proste brojeve može se podijeliti tako da svaka jezgra provjerava

određene brojeve i na kraju zajedno sastave rezultat). Međutim postoje i algoritmi koji se ne

mogu paralelizirati. Jedan od primjera je proračun decimali broja �, koji ovisi o prijašnjim

rezultatima. Ovakvi se problemi nazivaju svojstveni serijski problemi (inherently serial

problems).

Paralelni algoritmi su veoma korisni, omogućavaju obavljanje vrlo složenih proračuna u

kratkom vremenu. Kako se u novije vrijeme pokazalo, lakše je napraviti procesor sa više

sporijih jezgri, nego jedan sa jednom brzom jezgrom, a uz iste rezultate. Pa i prije spomenuti

Cell zapravo ima arhitekturu puno jednostavniju od nekih današnjih tržišnih procesora, a

svojim mogućnostima ih višestruko nadmašuje. Ipak svaki paralelni algoritam ima i svoj

serijski dio, pa paralelni algoritmi imaju točku zasićenja kada se daljnje ubrzanje ne može više

postići, prema Amdahlovom zakonu. Također, broj iskoristivih procesora ima svoju granicu i

nakon određenog broja procesora, ili jezgri, dodavanje novih nema više efekta.

Složenost serijskih algoritama mjeri se u zauzeću memorije i po tome koliko procesorskih

ciklusa zauzimaju. Paralelni algoritmi moraju brinuti o još jednom elementu, komunikaciji

među procesorima. To se postiže na dva načina, dijeljenom memorijom i komunikacijom

preko poruka.

Još jedan problem koji se javlja kod paralelnih algoritama je osiguravanje pravilne raspodijele

poslova. Može se dogoditi da neki procesori dobiju manje posla od drugih i prije završe

računanje te zatim čekaju na ostale bespotrebno trošeći cikluse.

Jedna podvrsta paralelnih algoritama su raspodijeljeni (distributed) algoritmi, čija je namjena

izvođenje na clusterima računala i raspodijeljenim računalnim okruženjima. U ovoj se

primjeni javljaju neki novi problemi koje moramo uzeti u obzir, ali koji prelaze okvire

paralelnog programiranja, a samim time i ovog seminarskog rada.

Page 10: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

10 | P a g e

3.2. RAZVOJNI ALATI

3.2.1. COMPOSITIONAL C++

Compositional C++ [16] je opće – namjenski programski jezik za programiranje paralelnih

aplikacija. Sve ključne riječi koje se nalaze u C++ nalaze se i u Compositional C++, ali uz

dodatak još šest drugih ključnih riječi. Dakle, svaki C++ program koji ne koristi

Compositional C++ ključne riječi svejedno je važeći Compositional C++ (CC++) program.

Na CC++ možemo gledati kao na skup proširenja za C++. Ta proširenja CC++ možemo

podijeliti na šest različitih apstrakcija:

1. - Processor objekt - Možemo ga nazvati jedinicom lokalnosti. Predstavlja adresni prostor unutar kojeg se svi pristupi podatcima smatraju kao lokalni pristupi, dakle pristupi lokalnoj memoriji definiranoj za taj objekt. Dretva koja se izvodi unutar objekta processor može pristupiti strukturama podataka alociranim ili definiranim unutar tog objekta processor koristeći obične pokazivače. Ključna riječ global identificira objekt klase processor.

2. - Globalni pokazivač - Zapravo se koristi za povezivanje processor objekata, a identificira se po tipu global. Globalni pokazivač mora se koristiti kako bi se pristupilo strukturama

podataka ili kako bi se napravili proračuni unutar drugih processor objekata.

3. - Dretve - Stvaraju se neovisno o processor objektu i unutar jednog takvog objekta može ih se izvoditi više od jedne. Ključne riječi par, parfor i spawn koriste se za stvaranje dretvi. Izvođenje dretve se može premjestiti iz jednog unutar drugog processor

objekta pomoću remote procedure poziva. Ovdje također vrijedi i upotreba globalnih pokazivača koji se koriste kako bi dretva mogla pozvati neku javnu funkciju koja se nalazi unutar nekog drugog processor objekta.

4. - sync varijabla - Označava se pomoću ključne riječi sync. Koristi se za sinkroniziranje izvođenja dretvi. Koristi se u slučajevima kada jedna dretva treba pričekati na izvođenje neke druge kako bi mogla dovršiti svoje izvođenje. Kada neku varijablu deklariramo kao sync, tada ona dobiva svoju početnu vrijednost koja je 'undefined'. Vrijednost takvoj varijabli može se dodijeliti samo jednom i tada se smatra kao konstanta. Kada dretva pokuša pročitati sync varijablu koja još ima vrijednost 'undefined', dogodit će se to

da će dretva ostati i čitati taj blok podataka sve dok se vrijednost te varijable ne promijeni. Bilo koji tip varijable može se proglasiti sync tip varijablom, pa tako i globalni pokazivači.

5. - Atomic funkcije - Specificira se klučnom riječi atomic. Koristi se kako bi se kontroliralo ispreplitanje dretvi koje se izvode unutar istoga processor objekta. Ako deklariramo neku funkciju kao atomic, to znači da se izvođenje te funkcije neće kositi sa izvođenjem bilo koje

Page 11: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

11 | P a g e

druge atomic funkcije deklarirane unutar istoga processor objekta. Drugim riječima, dok se jedna atomic funkcija izvodi, druga mora čekati sve dok se prva funkcija ne izvede u cijelosti.

6. - Transfer funkcije - Imaju preddefiniran tip CCVoid . Dozvoljavaju proizvoljnim strukturama podataka da se prenose između procesora kao argumenti remote procedure poziva.

PRIMJER (Svjetlije crvenom su označene ključne riječi CC++)

global class Stablo { //processor objekt public : //jedna funkcija (metoda) clan int trazi( int ); }; int Stablo::trazi( int A) { int ls, rs; if (list(A)) { //ako smo došli do lista if rjesenje(A) return (1); //ispitujemo da li je rjesenje else return (0); } else { //ako nije list, trazimo po podstablima Stablo *global lobj = new Stablo; Stablo *global dobj = new Stablo; par { //---> POCETAK PARALELNOG BLOKA

//stvaramo dretve za trazenje po podstablima ls = lobj->trazi(lijevo_dijete(A)); rs = dobj->trazi(desno_dijete(A)); } // ---> KRAJ PARALELNOG BLOKA delete (lobj); delete (dobj); return (ls+rs); } } void main () { int total; //stvaramo novi objekt processor za trazenje Stablo *global trazioc = new Stablo; //pokrecemo trazenje total = trazioc->trazi(1);

printf ( "Postoji %d rjesenja!" , total); }

Slika 2 – prikaz Compositional C++ programskog koda

U ovom primjeru, na slici 2, prikazali smo osnovne mogućnosti CC++. Gornji program nema deklarirane sve funkcije, ali možemo lako pretpostaviti koja je njihova uloga. U cjelini, program rekurzivno ispituje binarno stablo za neko rješenje tako da stvori novi zadatak (processor objekt i novu dretvu) za svaki čvor stabla i na kraju vraća broj listova koji sadrže zadano rješenje (npr.tražili smo neki broj u listovima stabla). Primjetimo paralelni blok kojim smo stvorili dvije dretve za traženje po podstablima. Ovo je vrlo jednostavan program (upotrijebljene su apstrakcije '1' i '2'), ali vrlo dobro opisuje glavnu ideju paralelnog programiranja u CC++.

Page 12: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

12 | P a g e

3.2.2. MPI (MESSAGE PASSING INTERFACE) MPI je jezično neovisan API (application programming interface, [9]) za komunikaciju preko poruka na paralelnim računalima. Općenito, MPI se smatra low-level, izražavajući paralelizam eksplicitno, a ne implicitno. Smatra se veoma uspješnim u postizanju visokih performansi i velikom prenosivošću među jezicima i platformama, ali mu se zamjera na nekim low-level osobinama. Namijenjen je da pruži osnovnu virtualnu topologiju, mogućnosti sinkronizacije i komunikacije između procesa. MPI uvijek radi sa procesima, iako se često govori o procesorima. Danas se za postizanje maksimalnih mogućnosti sa MPI-jem odabire jedan proces po procesoru (jezgri). MPI-jem možemo ostvariti point-to-point send/recieve operacije dogovorenog tipa, razmjenu podataka između procesa, kombiniranje djelomičnih rezultata od različitih procesa, sinkroniziranje različitih procesa, a omogućuje nam i dobavljanje informacija kao što su broj procesa u izvedbi, indentitet procesora kojem je pridjeljen neki proces, susjedni procesi dostupni u logičkoj topologiji, itd. Danas se koriste MPI-1 i MPI-2. MPI-2 je noviji i sadrži veći raspon mogućnosti. Ovdje smo MPI samo naveli, a potpuni opis njegovih mogućnosti ostavit ćemo za neku drugu priliku.

3.2.3. RAPIDMIND

1) Što je RapidMind?

RapidMind [14, 15,17] je platforma za razvijanje software-a koja omogućava C++ programerima da razviju optimizirane paralelne aplikacije ili da prošire već postojeće. Programerima se pruža jednostavan i standardiziran način programiranja aplikacija, koje RapidMind potom raspodijeljuje na dostupne resurse za obavljanje zadataka u danom sistemu. U aplikaciji možemo direktno specificirati module RapidMinda koje želimo koristiti, ili možemo napisati kod za neki zadatak sami. RapidMind se može implementirati u bilo koji ISO standardiziran C++ prevoditelj (Slika 3).

Slika 3 - implementacija RapidMind platforme u C++

Page 13: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

13 | P a g e

RapidMind platforma zasnovana je kao računalni jezik koji se zvao „Sh“ , čija je prvotna namjena bila razvoj aplikacija za grafički procesor. Sh je postavio temelje za RapidMindovo inovativno metaprogramming sučelje. Razvoj tog jezika pokrenuo je profesor računalnih znanosti Michael McCool sa kanadskog sveučilišta Waterloo. Radio je na njemu skoro punih deset godina kako bi stvorio simulaciju jata ptica koje bi se sastojalo od 16 000 pilića (Slika

4Slika 4 - grafički izgled simulacije). Svaki pilić kontroliran je jednostavnim programom umjetne inteligencije. Svaki se pilić želi približiti pijetlu, ali mora izbjegavati sudare sa drugim pilićima, ogradom i štagljem. Kako bi se to ostvarilo svaki pilić mora konstantno provjeravati položaj susjednih pilića i objekata u okolišu i tek onda odlučiti o svojim daljnim kretnjama. Prije samo dvije godine ovakva simulacija bi se mogla izvesi samo na cluster-u računala, međutim sa napretkom tehnologije posljednjih godina i pojavom višejezgrenih procesora danas se ova simulacija izvodi na jednom jedinom Cell BE (Cell Brodband Engine) procesoru, što je uzimajući u obzir složenost simulacije izvanredno dostignuće.

Slika 4 - grafički izgled simulacije

2) Proces razvoja aplikacija sa RapidMindom Kao i svaki današnji high-level programski jezik, C++ sadrži biblioteke često potrebnih potprograma i različitih funkcija koje uvelike pojednostavljuju život programerima. Kad programer zatreba neku od tih funkcija, on jednostavno umetne riječ u program kojom se ona poziva. Međutim, kod programiranja paralelnih aplikacija sa RapidMindom, umjesto da programer piše tekst programa običnog C++, programer koristi ključne riječi iz RapidMindovog riječnika koje se referenciraju na potprograme i funkcije iz RapidMindove biblioteke. Te ključne riječi pozivaju funkcije i potprograme koje se izvršavaju paralelno. Programer mora samo definirati skup podataka koji će se izvršiti u paraleli, a funkcije preuzimaju nadalje. Dobra strana kod upotrebe RapidMinda je ta da programer ne mora znati ništa o procesoru za koji radi aplikaciju. Kada se aplikacija pokrene, RapidMind platforma utvrđuje da li će se izvoditi na grafičkom procesoru, Cell procesoru ili nekom trećem, te prevodi kod koji je programer napisao u kod koji određeni procesor razumije. Kada odredimo koje ćemo skupove podataka ubrzati, RapidMind lomi polja tih podataka u dijelove koji se tada prenose svim dostupnim jezgrama. Što više jezgri to više dijelova u koje se podatci lome. Kako bi se osiguralo da sve jezgre konstantno rade na nečemu, sistem dodjeljuje zadatke prema tome kako se koja jezgra oslobodi ('on the fly'), tako na primjer kada se jedna jezgra posebno dugo muči sa nekim proračunom, ostale jezgre dobivaju puno

Page 14: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

14 | P a g e

lakših zadataka i tako se cijelo vrijeme iskorištavaju. Nakon što smo definirali koje dijelove treba ubrzati proces ide dalje na sljedeći način (Slika 5):

1. ZAMJENA TIPOVA Programer zamjenjuje numeričke tipove koji predstavljaju float i integer podatke sa ekvivalentnim tipovima RapidMind platforme.

2. „HVATANJE PRORAČUNA“ (capture computations) Dok je aplikacija pokrenuta, numeričke operacije koje ona poziva mogu se uhvatiti, snimiti i dinamički kompajlirati u objekt programa preko RapidMind platforme.

3. STREAM IZVRŠENJE RapidMindov runtime se koristi kao voditelj (manager) kod paralelnog pokretanja objekata programa na određenoj hardverskoj platformi, koja može biti grafički procesor, centralni procesor ili Cell procesor.

Slika 5 - proces razvoja aplikacije

3) RAPIDMIND SUČELJE

RapidMind sučelje temelji se na tri osnovna C++ tipa: value, array i program. Sva tri tipa su zapravo spremnici, prva dva za podatke, a posljednji za operacije. Na prvi pogled, možda nam se ne čini posebno zanimljivi ni value tipovi, ni array, ali semantika ovih tipova

Page 15: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

15 | P a g e

namjerno je izabrana kako bi se olakšalo njihovo učenje. Ovi tipovi formiraju sučelje engine-a za paralelno izvršavanje aplikacija baziranog na generiranju dinamičkog koda. To se postiže pomoću program tipa koji je ključna inovacija u ovom sučelju. Simbolički retained mode

izvršavanja aplikacija koristi se kako bi se sakupile proizvoljne operacije nad value i array tipovima podataka u jedan objekt programa. Kad se te operacije sakupe, njima se tada može manipulirati pomoću dinamičkog prevoditelja.

- VALUE pr. Value<N,T> Instanca ovog tipa sadrži N vrijednosti (N-torku) tipa T gdje je T osnovni numerički tip: float, double, integer, itd. Dakle Value4f sadrži N-torku od četiri vrijednosti tipa float, Value3ub sadrži N-torku od tri vrijednosti tipa unsigned bytes, a Value4bool sadrži četiri vrijednosti tipa bool. Value1f bi zamijenili za jednu varijablu tipa float. U ovakvoj sintaksi aritmetički, bitovni, logički i usporedbeni opeartori nad value tipovima su nadgrađeni, pa djeluju na pojednine komponente (componentwise). Standardne funkcije su također dostupne (trigonometrijske funkcije, eksponencijalne, logaritamske...) i one imaju ista imena kao i one iz C++ math biblioteke, pa su također nadgrađene, ali i proširene tako da djeluju po komponentama programa.

Value3f reflect (Value3f v, Value3f n) { return Value3f(2.0f*dot(n,v)*n - v); }

Slika 6 - primjer RapidMind programskog teksta

Kratki primjer na slici 6 zapravo računa refleksiju vektora od nekog 3D objekta za neku danu normalu. Ovdje primjećujemo prvo definiran tip za funkciju reflect. Također primjećujemo da su varijable v i n deklarirane kao trojke vrijednosti float tipa, dakle svaka varijabla može sadržavati po tri vrijednost

- ARRAY

Array<D,T> tip je također spremnik podataka, baš kao i value tip, ali sa bitnom razlikom, multidimenzionalan je i može biti varijabilan u veličini. Integer D je dimenzija i može biti 1, 2 ili 3. T je tip elemenata. Elementi u array tipu ograničeni su na instance value tipova. Ovdje možemo primjetiti da se array tipu ne zadaje eksplicitno broj elemenata koje će sadržavati, zato broj elemenata nije dio array tipa. Instance tipa array podržavaju „[ ]“ i „( )“ operatore za pristup elementima. Vrijednosti elemenata možemo dobiti iz array tipa tako da koristimo odgovarajuću dimenziju kao što je i dimenzija argumenta. Operator „()“ koristi integer bazirane koordinate, dok „[ ]“ koristi realne koordinate izvan perioda [0, 1] za svaku dimenziju. Podpolja array tipa dohvaćamo pomoću slide, offset i stride funkcija.

- PROGRAM Posljednji i temeljni tip je program. Program objekt sadrži sekvence operacija. Te operacije se mogu specificirati prelaskom u retained mode koji se naglašava sa macro

ključnom riječi BEGIN. Normalno se sustav nalazi u immediate mode-u, proračuni se izvršavaju na istoj jezgri, a rezultati će se spremiti u izlaznu n-torku. Ulaskom u

Page 16: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

16 | P a g e

retained mode stvara se novi program objekt. Dok se nalazi u retained mode-u operacije nad value n-torkama se ne izvršavaju, umjesto toga one se simbolički evaluiraju i spremaju u program objekt. Izlaz iz retained mode-a naglašavamo END macro-om koji zatvara program objekt i obilježava ga kao spremnog za kompilaciju. Nakon kompilacije se gotov program objekt može koristiti za računanje. Program

objekti se prevode pomoću dinamičkog prevoditelja (dynamic compiler) koji može iskoristiti low-level mogućnosti ciljanog procesora.

Treba naglasiti da iako su value i array tipovi omotani u C++ razrede, izvršni model RapidMind platforme sličniji je FORTRAN-u. Objektno orijentiran pristup C++ može poslužiti za definiranje proračuna, ali pointeri i pozivi virtualnih funkcija ne nalaze se u konačnom strojnom kodu koji generira RapidMindov biblioteke. Jedino operacije koje su izravno povezane sa value i array tipovima i kao takve spremaju simboličke operacije u program objekt tijekom retained mode-a izvršavanja, zapravo obavljaju računanje na ciljanom sustavu. C++ pruža sintaksu za generiranje koda, ali sam kao takav se ne koristi u izvršavanju aplikacije.

4) PRIMJERI

Primjer 1 Value3f n;

Program p = BEGIN { In<Value3f> v; Out<Value3f> r; Value3f nn = normalize(n); r = reflect(v,nn); } END;

Slika 7 - primjer 1

Primjer 1 sa slike 7, u kojem se koristi reflect funkcija definirana ranije i normalize funkcija definirana u biblioteci, dijeli value tip podatka sa njegovom euklidskom dužinom. Tu se demonstiraju neke jednostavne komponente. Prvo vidimo da su n-torke v i r modificirane sa In i Out template omotačima (template wrappers) i primjećujemo BEGIN i END macro-e. Template-i određuju koje su varijable ulazi funkcije, a koje izlazi. Prije izvršenja programa varijable označene kao ulazne biti će inicijalizirane sa podatcima. Nakon izvršenja programa varijable označene kao izlazne uzimaju se kao izlazi ili povratne vrijednosti. Primjetite da je varijabla n referencirana unutar programa p, a instancirana izvan. Kada će se program p

izvršavati, upotrijebiti će trenutnu vrijednost varijable n, koja god to vrijednost bila, makar se izvodi na udaljenom procesoru (remote processor) ili u paraleli na više jezgri. RapidMind platforma će pamtiti koji programi ovise o kojim podatcima i prema tome ih raspodijeljivati.

Page 17: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

17 | P a g e

Primjer 2 Value3f acc; // akceleracija Value3f acc; Value1f del_time; // vremenski inkrement Value1f del_time; Value1f max_time; // max vrijeme života čestice Value1f max_time; Program evolve = BEGIN { Program evolve = BEGIN {

In<Value3f> vel, pos; InOut<Value3f> vel, pos; In<Value1f> time; InOut<Value1f> time;

Out<Value3f> new_vel, new_pos; vel += acc * del_time; Out<Value1f> new_time; ���� pos += vel * del_time; new_vel = vel + acc * del_time; time += del_time;

new_pos = pos + vel * del_time; IF (time > max_time) { new_time = time + del_time; pos = Value3f(0,0,0);

IF (time > max_time) { vel = normalize(hash(pos)); new_pos = Value3f(0,0,0); } ENDIF; new_vel = normalize(hash(pos)); } END; } ENDIF; } END;

Slika 8 - primjer 2

Primjer 2 sa slike 8, određuje balističku putanju čestica dok se ne dostigne vrijeme njihovog života i zatim ih resetira sa novim položajem i sa novom brzinom (u kodu je dan način njihovog izračuna). Desni primjer je koncizniji zapis lijevog. Primjećujemo da smo varijable vel, pos i time u desnom primjeru zapisali kao ulazne i izlazne, dok je u lijevom primjeru to šest različitih varijabli. Međutim, InOut oznaka ne znači da će ulaz u program biti modificiran kako bi se dao izlaz i to iz razloga jer se vrijednosti prenose po iznosu (by value) a ne po referenci, a i zato jer su ulazi i izlazi međusobno odvojeni. Ovdje se po prvi puta susrećemo i sa naredbama za kontrolu toka programa IF/ELSEIF/ELSE/ENDIF. Osim njih podržane su i petlje FOR/ENDFOR, WHILE/ENDWHILE i DO/UNTIL koje djeluju isto kao i u C++.

Primjer 3

#include <rapidmind/platform.hpp> float f; Value1f f;

float a[512][512][3]; Array<2,Value3f> a(512,512); float b[512][512][3]; Array<2,Value3f> b(512,512); float func (float r, float s) { void func_arrays ( ) { return (r + s) * f; Program func_prog = BEGIN { } ���� In<Value3f> r, s; Out<Value3f> q; void func_arrays ( ) { q = (r + s) * f; for (int x = 0; x<512; x++) } END; for (int y = 0; y<512; y++) { a = func_prog(a,b); for (int k = 0; k<3; k++) { }

a[y][x][k] = func(a[y][x][k],b[y][x][k]); } } } }

Slika 9 - primjer 3

Page 18: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

18 | P a g e

Posljednji primjer, slika 9, je usporedba teksta programa napisanog u običnom C++ i teksta programa napisanog sa RapidMind platformom. Prikazuje se paralelizacija for petlje.

5) POGLED DALJE

Programiranje sa RapidMind platformom za GPU, CPU ili Cell procesor temelji se na istim principima, jedina je razlika gdje koji procesor sprema podatke (npr. na grafičkom procesoru podatci se spremaju u grafičke teksture, a u običnim centralnim procesorima u registre), jer se memorijski modeli razlikuju, ali o tome se brine platforma, a ne programer. Siječanjsko izdanje časopisa „IEEE Spectrum“ (2007.) proglasilo je RapidMind platformu jednom od dobitnika 2007. godine zato jer platforma uistinu funkcionira, ubrzanja postignuta sa RapidMind platformom iznosila su oko deset puta u odnosu na izvođenje na jednojezgrenim procesorima. Nažalost u trenutku pisanja ovog seminarskog rada bila je dostupna 2.0 verzija platforme koja ne podržava Intel Core Duo procesore koji su bili dostupni za izvođenje programa, pa nije napravljen funkcionirajući program za demonstraciju, ali bila je najavljena verzija 3.0 sa podrškom za sve Intelove i AMD-ove višejezgrene procesore koja bi trebala izaći sredinom 2007. Dakle nesumnjivo je da ćemo se sa RapidMind platformom sretati sve ćešće i to u bližoj budućnosti.

Page 19: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

19 | P a g e

4. RAY TRACING U STVARNOM VREMENU 4.1. UVOD U RAY TRACING

Ray Tracing [12], općenito, omogućuje ispravnu simulaciju kompliciranih fizikalnih svjetlosnih efekata poput refleksije na metalu ili staklu te refrakcije i apsorpcije svjetla na različitim materijalima. Kao ideja se javlja još davne 1979. godine i prvi ju je opisao Turner Whitted. I prije ray tracing-a postojali su neki algoritmi za prikazivanje fotorealističnih sadržaja, ali oni su pratili tok zraka svjetlosti iz zamišljenog oka u neku scenu i nisu je pratili dalje. Kod ray tracing-a Whitted je nastavio proces, kada zraka udari u neki objekt mogu se odgoditi tri slučaja: refleksija, refrakcija ili pojava sjene. Ako se zraka reflektira, ona nastavlja svoj put kroz scenu do drugog objekta, najbliži objekt do kojeg zraka dođe će se vidjeti u refleksiji prvog objekta od kojeg se zraka odbila. Sa refrakcijom stvar je ista, ali zraka može ući i izaći iz transparentnog materijala. Da ne bi pratili sve zrake kroz scenu, pomoću zraka sjene testiramo da vidimo je li površina vidljiva za svjetlo. Ray tracing duguje svoju popularnost realističnijim simulacijama prikaza svjetlosti nad drugim metodama renderiranja ovog tipa. Efekti kao što su refleksija i sjene, koje je inače teško dobiti pomoću drugih algoritama, prirodni su rezultat ray tracing algoritma. Relativno jednostavan za implementirati, a sa velikim vizualnim mogućnostima, ray tracing često predstavlja prvi korak u programiranju računalne grafike.

4.2. RAY TRACING U STVARNOM VREMENU

Klasični rekurzivni ray tracing algoritam (pseudokod, slika 10):

Slika 10 - ray tracing algoritam

Za svaki piksel na slici { stvori zraku iz točke gledišta koja prolazi kroz taj piksel; inicijaliziraj najbližiVrijeme na beskonačno i najbližiObjekt na NULL; za svaki objekt u sceni { ako zraka presjeca predmet { ako vrijeme presjecanja manje do najbližiVrijeme { postavi najbližiVrijeme na vrijeme presjecanja; postavi najbližiObjekt na taj objekt; } } } ako najbližiObjekt je NULL { popuni piksel sa pozadinskom bojom; } inače { ispali zraku iz točke prema svakom izvoru svjetla da provjerimo da li je u sjeni; ako je površina reflektirajuća, generiraj reflektirajuću zraku->rekurzija; ako je površina transparentna, generiraj refraktirajuću zraku->rekurzija; upotrijebi najbližiObjekt i najbližiVrijeme za izračunavanje shading funkcije; popuni ovaj piksel sa rezultatom shading funkcije; } }

Page 20: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

20 | P a g e

Prvo se stvori zraka u točki gledišta koja se prati kroz piksel u scenu gdje se odbija od difuzne površine u svim smjerovima. Od te površine algoritam rekurzivno generira reflektirajuću zraku, koja se dalje prati kroz scenu gdje ponovno udara u neku površinu. Kada zraka svjetla pogodi izvor svjetla tada se apsorbira. Boja piksela ovisi o boji površina od kojih se zraka odbila i o svjetlu emitiranom iz izvora svjetlosti (npr.ako je izvor bijela svjetlost, a reflektirajuće površine plave, tada je i piksel plav).

Slika 11 - autolampa računalno generirana pomoću raytracinga

Tradicionalno real-time ray tracing izvodio se jedino u nekomercijalne svrhe i na velikim cluster-ima računala, jer zbog prevelikog broja proračuna komercijalni procesori nisu mogli zadovoljiti potrebne uvjete brzine. Danas se umjesto izvođenja na cluster-ima računala real-time ray tracing može izvoditi na server računalima baziranim na Cell BE procesoru. Možemo očekivati i multimedijalne aplikacije sa real-time ray tracing rendering metodama koje će predefinirati pojam realističnih računalnih efekata. Real-time ray tracing se do sada pretežito koristio u svrhu modeliranja u automobilskoj (Slika 11) i zrakoplovnoj industriji za dobivanje vjernih prikaza modela u realnom vremenu i zapravo je konkretan prikaz kolike su mogućnosti višejezgrenih procesora.

Page 21: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

21 | P a g e

5. ZAKLJUČAK

„Napori da proširimo standardne programske jezike bazirane na serijskom programiranju sa

osobinama kojima bi mogli opisati paralelne konstrukte, naginju prema propasti.

Vjerojatnije bi mogli uspjeti jezici koji bi podigli razinu apstrakcije u opisivanju algoritama.“

(Nick Tredennick)

„Računalni znanstvenici nisu bili zainteresirani za programiranje na cluster-ima računala. Ako

ih zanima kako staviti cluster računala na jedan čip, neka, svejedno će morati moći pokretat

fortran.“

(Gordon Bell)

Danas se nalazimo na prekretnici u razvoju računalnog softwarea. Računalni centralni procesor svakim danom postaje sve moćniji, ali isto tako sve teže postaje programerima iskoristiti sve njegove osobine. Prije je programer mislio samo na to kako započeti neku aplikaciju i kako je završiti, danas mora misliti i gdje izvršiti svaki njen dio. Razina na kojoj razmišlja programer se povećala, ali razina na kojoj razvija aplikaciju ostala je ista. Možda je došlo vrijeme da se poveća razina apstrakcije u pisanju aplikacija, koja je nepromijenjena već 40 godina. Stvarnost je takva da malo kasnimo sa razvojem jezika za programiranje na višejezgrenim sustavima, iako već dugo vremena postoje sustavi u kojima ima puno više od jednog procesora. Prije su se njima bavili samo znanstvenici, prosječni programer nije imao prilike doći u doticaj sa takvim sustavom, ali danas više nisu samo programeri ili znanstvenici u doticaju s tavkim sustavom, danas smo svi u doticaju s njima i uskoro će se integrirati u naš svakodnevni život. Trenutno vjerojatno najnaprednija platforma za pisanje paralelnih programa, RapidMind, nastala je kao rezultat desetogodišnjeg rada jednog čovjeka. Njeno proširenje na višejezgrene procesore bio je rezultat njene prirode, ali jedna platforma nije dostatna.

U studenome 2006. godine, Intel je prikazao prototip procesora sa 80 jezgri i za očekivati je da će se taj broj i dalje povećavati, prvo kao prototip, a zatim u našem domu. Budućnost je blizu, jedina prepreka je što je trenutno ne možemo iskoristiti. Uskoro ćemo moći držati superračunalo na dlanu i imati ih nekoliko u posjedu. Doći će vrijeme za predefiniranje računalnih mogućnosti i povećanje mjerenja performansi za red veličine. Jedina stvar koja se mora dogoditi da nam se ta vrata otvore je pružiti programerima sredstva da nam pomognu iskoristiti budućnost.

Page 22: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

22 | P a g e

6. LITERATURA

[1] Amdahl's Law, 28.03.2007., Amdahl's Law,

http://en.wikipedia.org/wiki/Amdahl%27s_law, 22.04.2007.

[2] Chache Coherency, 21.12.2004., Cache Coherency,

http://en.wikipedia.org/wiki/Cache_coherency, 22.04.2007.

[3] Concurrent Computing, 31.08.2005., Concurrent Computing,

http://en.wikipedia.org/wiki/Concurrent_computing, 22.04.2007.

[4] GPGPU, 02.03.2005., General Pourpose Computing on GPU,

http://en.wikipedia.org/wiki/GPGPU, 22.04.2007.

[5] GPU, 06.12.2003., Graphics Processing Unit,

http://en.wikipedia.org/wiki/Gpu, 22.04.2007.

[6] Gustafson's Law, 01.03.2006., Gustafsnon's Law,

http://en.wikipedia.org/wiki/Gustafson%27s_law, 22.04.2007.

[7] Hyperthreading, 25.11.2002., Hyperthreading,

http://en.wikipedia.org/wiki/Hyperthreading, 22.04.2007.

[8] Multicore, 22.12.2005., Multi-core (computing),

http://en.wikipedia.org/wiki/Multi-core_%28computing%29, 22.04.2007.

[9] MPI, 04.05.2003., Message Passing Interface,

http://en.wikipedia.org/wiki/Message_Passing_Interface, 22.04.2007.

[10] Parallel programming Model, 15.07.2005., Parallel Programming Interface,

http://en.wikipedia.org/wiki/Parallel_programming_model, 22.04.2007.

[11] Parallel Algorithms, 19.11.2002., Parallel Algorithms,

http://en.wikipedia.org/wiki/Parallel_algorithms, 22.04.2007.

[12] RayTracing, 27.09.2001., Raytracing,

http://en.wikipedia.org/wiki/Raytracing, 22.04.2007.

[13] Symmetric Multiprocessing, 25.04.2002., Symmetric Multiprocessing,

http://en.wikipedia.org/wiki/Symmetric_multiprocessing, 22.04.2007.

[14] RapidMind development platform overwiev, 20.04.2007., RapidMind

development platform overwiev,

http://www.rapidmind.net/pdfs/RapidmindDatasheet.pdf

[15] Michael D. McCool, WPdrpm, 20.04.2007., Data-Parallel programming on the

Cell BE and the GPU using the RapidMind Devolepment platform,

http://www.rapidmind.net/pdfs/WPdprm.pdf, 31.10.2006.

[16] Foster, I. , Designing and Building Parallel Programs, 20.04.2007., Designing

and Building Parallel Programs: Compositional C++, http://www-

unix.mcs.anl.gov/dbpp/, 1995.

[17] Goldstein, H., Winners And Loosers 2007: RapidMind Development Platform,

IEEE Spectrum, 1.(2007), str 37. – 39.

[18] Blachford, N., Cell Architecture Explained, 19.03.2007., Cell Architecture

Explained, http://www.blachford.info/computer/Cell/Cell0_v2.html, 2005.

Page 23: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

23 | P a g e

7. SAŽETAK a. DIO

- AMDAHLOV I GUSTAFSONOV ZAKON

AHMDAL – ubrzanje izvođenja programa na višejezgrenim proceosorima ograničeno

je njihovim sekvencijalnim dijelovima.

GUSTAFSON – bilo koji dovoljno velik problem može se efikasno paralelizirati.

- ARHITEKTURE

SMP (Symmetric Multiprocessing) – dvije ili više identičnih jezgri spojene na

zajedničku memoriju, ali imaju i svoju memoriju. Najčešće korištena arhitektura.

NUMA (Non-Uniform Memory Access) – različite jezgre imaju različite spremnike

memorije i pristupaju im paralelno. Probem prijenosa podataka iz jednog u drugi

spremnik. Koristi se za serverske procesore i izgradnju velikih superračunala.

ASMP (Asymmetric Multiprocessing) – Sadrži jezgre specijalizirane za pojedine

zadatke (CPU, GPU, PPU). Ista memorija nije dostupna svim jezgrama.

- GPGPU (General Purpose Computing on GPU)

Grafičke kartice imaju već dugo vremena posebne jedinice koje možemo nazvati

procesorima, shader procesori. Služe za prikaz kompleksnih grafičkih okruženja. U

novije vrijeme zbog velikih mogućnosti izvedbe kompleksnih proračuna i velike

preciznosti cjevovoda za renderiranje na grafičkoj kartici, koriste se za izvođenje

ne-grafičkih proračuna.

- CELL

Procesor sa najviše jezgri trenutno dostupan na tržištu. Sadrži jednu PPE jezgru i

osam SPEs jezgri. PPE je zadužen za raspodjeljivanje zadataka između SPEs jezgri i za

low-level zadatke OS-a. U SPEs jezgrama je pohranjena prava snaga Cell procesora sa

teorijskom brzinom proračuna od 256 GFLOPS.

b. DIO

- PARALELNI ALGORITMI

Paralelni algoritmi nalaze se nasuprot serijskim algoritmima. Mogu se podijeliti na

manje dijelove i izvoditi na više jezgri istovremeno, kasnije se kombinacijom

dobivenih rezultata dobije konačno riješenje. Ipak ne mogu se svi programi efikasno

paralelizirati.

- COMPOSITIONAL C++

Djeluje kao skup proširenja na regularni C++. Sadrži sve ključne riječi kao i C++, ali uz

dodatak još šest novih (global, par, parof, spawn, sync i atomic). Svaki C++ program

koji ne sadrži ključne riječi CC++, također je valjan CC++ program.

Page 24: Viš ejezgrene Arhitekture - zemris.fer.hryeti/studenti/radovi/Seminar Visejezgrene... · 5 | Page 2. PLATFORME I ARHITEKTURE 2.1. AMDAHLOV I GUSTAFSONOV ZAKON Prije samog ulaza u

24 | P a g e

- MPI (Message Passong Interface)

Izražava paralelizam eksplicitno, a ne implicitno. Ima puno low-level osobina. Smatra

se veoma uspješnim u postizanju visokih rezultata. Radi sa procesima, a ne

procesorima. Jezično neovisan API.

- RAPIDMIND

Platforma za razvijanje optimiziranih paralelnih aplikacija za višejezgrene sustave.

Radi na principu razbijanja programa u programske objekte i paralelizaciji podataka

(jedna varijabla može sadržavati i više vrijednosti). Nije nužno neko posebno znanje o

procesoru za koji se piše aplikacija, platforma sama utvrđuje na kojem će se

procesoru program izvesti.

c. DIO

- REAL-TIME RAY TRACING

Omogućuje vjerni prikaz svjetlosnih efekata refleksije, refrakcije i apsorpcije. Zbog

vrlo kompleksnih proračuna teško se izvodilo u stvarnom vremenu (samo na

clusterima računala). Danas se izvodi na višejezgrenim procesorima.