NOVE TEHNOLOGIJE<>
092007<><>

Programi za višejezgarne procesore

Vreme je za konkurentnost

Softveraši su dosad samo uživali u napretku hardvera. Međutim, uvođenjem višejezgarnih procesora, lopta je sada u polju programera i potrebna im je potpuno nova taktika za pobedu, a ne samo novi dresovi

Proizvođači procesora su nas razmazili! Svih ovih godina, napredak procesora bio je gotovo linearan. Svake godine imali smo brže procesore, čija je snaga dolazila iz sve većeg takta koji su mogli da postignu. Ipak, od 2004. godine nadalje, veliki proizvođači prave zaokret u cilju dostizanja boljih performansi. Uvode se višejezgarni procesori. Pitate se kakve ovo ima veze sa softverom? Nažalost, ili na sreću – prevelike!

Proizvođači softvera dosad su uživali u jednoj zanimljivoj vožnji, i to besplatnoj. Naime, kako su procesori postajali sve brži i brži, njihovi programi su umeli i te kako da cene i iskoriste svaki MHz „viška”. Tako je ista aplikacija skoro uvek bila brža na modelu od 1 GHz nego na onom od 500 MHz. Najavljivani su i modeli do 10 GHz, ali najviša brojka do koje su velike kompanije za proizvodnju procesora došle nije prešla 4 GHz.

Vožnja više nije besplatna

Filozofija koja se previše često koristila u prošlosti neprestano je uveravala potrošače da će procesori budućnosti doneti odgovarajuću brzinu i efikasnost, ukoliko sadašnji to ne mogu. Zaista, tako je i bilo sve do pre tri godine, ali od tada ovakve tvrdnje ne stoje. Ako pogledamo dvadesetak godina unazad, otkrićemo da se razvoj procesora svodi na povećanje radnog takta, veličine keš memorije i usavršavanje efikasnosti u radu. Prva i treća metoda donose gotovo linearan napredak u performansama. Povećanjem radnog takta procesora na raspolaganju nam je više ciklusa, što direktno znači da možemo da uradimo više operacija za isto vreme u odnosu na po taktu slabiji procesor. Usavršavanje efikasnosti u radu omogućava više rada po ciklusu, bilo korišćenjem ekstenzija procesora, moćnih instrukcija, izvršavanja više instrukcija u jednom taktu, pajplajnova ili predikcija skoka. Sve će ovo iscediti iz procesorske jedinice svaki atom snage koji poseduje, istovremeno smanjujući kašnjenja i povećavajući količinu operacija koje mogu da se ostvare u jednom ciklusu.

Povećanjem keš memorije sve smo dalje od RAM-a, što je vrlo dobro za performanse. Ako uzmemo u obzir činjenicu da, u slučaju da se podatak ne pronađe u kešu, izvršavanje operacije može biti usporeno i do 50 puta, jasno je da veći keš znači i manje „promašaja”. Naravno da sve ne leži u veličini keš memorije, već i u algoritmima zamene i zahvatanja podataka.

Sva ova ubrzanja skratiće vreme aplikacijama koje koriste sekvencijalno i konkurentno izvršavanje. Sekvencijalnim aplikacijama nazivamo one programe čiji se delovi kôda izvršavaju neparalelno (samo jedan deo kôda izvršava se u jednom trenutku), što znači da u suštini predstavljaju samo jednu nit ili proces, dok konkurentnim aplikacijama zovemo one kod kojih se više delova kôda može izvršavati istovremeno.

Savremeni procesori kao nov put

Trka brzine takta izgleda je završena i savremeni procesori su krenuli u potpuno drugom pravcu. Budući dobici u performansama biće postignuti isključivo pomoću osobina Hyper Threadinga, povećanja broja jezgara i količine keša koji im je dostupan. Tehnika Hyper Threadinga predstavlja mogućnost pokretanja nekih operacija u paraleli. Intel koristi ovu tehniku od pojave Pentium 4 procesora i, prema analizama, ubrzanja koja ona donosi veoma zavise od aplikacije. Brojke kažu da je ubrzanje 5–15% kod relativno dobro napisanih aplikacija koje koriste paralelizam, ali dostiže i 40% kod onih koje se mogu nazvati savršeno napisanim konkurentnim aplikacijama. Ali, gde su tu sekvencijalni programi?

Povećanje broja jezgara više nije samo priča iz naučnofantastičnih filmova. Već tri godine posmatramo najveće svetske proizvođače u trci da što brže predstave nove mikroarhitekture i sve veći broj jezgara na jednoj pločici. Intel je za 2011. godinu najavio 80 jezgara! Ovakav razvoj procesora bi trebalo, u teoriji, da donese linearni dobitak u performansama, no opet, samo za konkurentne aplikacije.

Veličina keša na čipovima dostigla je, nekada neverovatnih 4 MB. Očekuje se dalji rast količine raspoloživog prostora za ovu veoma brzu, asocijativnu memoriju. Ovo je, zapravo, jedina oblast od koje će sve aplikacije imati koristi.

Ali, da li je to dovoljno ubrzanja? Većina današnjih programa nisu konkurentni, već sekvencijalni. Kao i nebrojeno puta dosad u istoriji, rešenje je samo jedna reč – revolucija!

Nova softverska era

Nekada se objektno orijentisano programiranje smatralo revolucionarnim, a danas ta titula prelazi u ruke konkurentnog, paralelnog programiranja. Ovaj način programiranja već je odavno prisutan, još od šezdesetih godina prošlog veka. Zašto onda i dalje pišemo sekvencijalne aplikacije?

Zato što je konkuretno programiranje teško! U sekvencijalnom programiranju programski tok se lako prati, a samim tim se relativno lako ispravljaju i greške, što nije slučaj kod paralelnog. Najveći broj problema kod konkurentnog programiranja leži u nedeterminističkom izvršavanju programa. Više niti ili procesa koji se istovremeno izvršavaju znači bezbroj mogućih scenarija zavisno od toga ko kada „dobija” procesor.

Dve osnovne prednosti konkurentnog programiranja su: logičko odvajanje prirodno nezavisnih tokova izvršavanja nekog programa i iskorišćenje više fizičkih procesora, pogotovu kada su oni pasivni, zbog čekanja na neku ulazno-izlaznu operaciju ili slično. Idealan slučaj za paralelizovanje bila bi obrada slika i videa jer je lako podeliti posao na frejmove i segmente svake slike, te je stoga DivX kompresija među prvima iskoristila višejezgarne procesore. Ipak, mane konkurentnog programiranja, pored njegove težine, leže u činjenici da nisu sve aplikacije pogodne za paralelizam. Na primer, od Beograda do Smedereva automobilom se stigne za oko 45 minuta. To ne znači da ćete korišćenjem 45 automobila stići za jedan minut, ali znači da ćete prevesti 45 puta više putnika za isto vreme. Ovo navodi da je potrebno posmatrati proizvodnju softvera na drugačiji način, uvažavajući i kvantitet i efikasnost prenosa podataka.

Ukoliko želimo da programi mogu da na pravi način iskoriste hardverske pomake, moramo se okrenuti konkurentnosti, a taj okret ima i odgovarajuće posledice. Pre svega, efikasnost i optimizacija programskog kôda postaju važniji nego ikad i programski jezici moraće da postanu orijentisani ka poboljšanju performansi. Takođe, programski jezici moraće da implementiraju odgovarajuće sisteme koji omogućuju konkurentnost. Standard ISO C++ ne podržava niti (threads), a konkurentnost se ostvaruje korišćenjem biblioteka koje su veoma zavisne od platforme na kojoj se izvršavaju. Standardi koji se najčešće koriste su OpenMP, pthreads i MPI i oni podržavaju implicitni, ali i eksplicitni paralelizam. Implicitni paralelizam podrazumeva da sistem ili kompajler dele proces i sprovode ga do odgovarajućeg procesora automatski, a eksplicitni da programer definiše algoritam deljenja, kao i raspoređivanje delova procesa na procesor(e). Java ima ugrađen sistem za podršku konkurentnosti od svog začetka, a poslednje revizije su ispravile i nekoliko nedoslednosti koje je ovaj sistem posedovao. Pristup koji je Sun Microsystems odabrao je onaj sa skrivenom implementacijom, jer se programer oslanja na alate koji su na višem apstrakcionom nivou nego semafori i zaključavanja deljenih promenljivih, što predstavlja osnovu konkurentnog programiranja. Donedavno je pisanje softvera za više niti u paraleli bilo rezervisano za eksperte, a odnedavno i prosečni programeri korisničkih i komercijalnih aplikacija moraju dobro da poznaju ovu tehniku.

Jedan od sistema za konkurentno programiranje sa skrivenom implementacijom koje programeri danas često koriste jesu futures. Najbolje ih je shvatiti kao delove kôda koje programer želi da izvrši i umesto da poziva funkciju koja sadrži kôd i čeka na povratnu vrednost odmah nakon izvršavanja, on odvaja poziv i čekanje. Najpre se biblioteci saopšti namera za korišćenje ovog mehanizma. Dalji mogući scenariji su: izvršavanje, stavljenje u red čekanja koji se aktivira radom neke niti, ili pak ignorisanje poziva, a na programeru je da zatraži rezultat kada zaželi. Ukoliko je rezultat spreman, vraća se, a ukoliko ne, čeka se. S obzirom na to da ovaj sistem ne eliminiše brigu oko zaključavanja deljenih promenljivih, teško da će predstavljati ozbiljniji paket u budućnosti.

Planovi velikih i malih

Dok svet čeka da se programeri upuste u nove vode, hardverske korporacije pokušavaju da daju doprinos lakšem prelasku. Intel je proizveo Threading Building Blocks (TBB), bibliotečki sistem koji nudi bogat i potpun pristup paralelizmu u programskom jeziku C++. Nije potrebno da budete ekspert u pisanju konkurentnih programa, jer ovaj sistem podiže rad na viši nivo apstrakcije. Autori ističu da se korišćenjem TBB-a smanjuje broj linija i kompleksnost kôda za razvoj konkurentnih aplikacija, a koristi se i automatski sistem za odlučivanje koliko niti treba pokrenuti, uz održanje ravnoteže raspoređenosti niti po procesorima. Garantuje se i kompatibilnost kôda pisanog pomoću ovog sistema sa budućim sistemima koji će imati mnogo više jezgara nego današnji. Raduje i činjenica da je TBB moguće besplatno skinuti sa www.threadingbuildingblocks.org, s obzirom na to da je u julu ove godine objavljen pod GPLv2.

U taboru AMD-a odlučeno je da se krene nešto drugačijim putem. U ovoj kompaniji odlučili su da prošire set instrukcija kako bi softverskim kompanijama i pojedincima olakšali iskorišćenje snage višejezgarnih procesora. Tehnika je dobila ime Light Weight Profiling (LWP) i predstavlja set proširenih instrukcija AMD64 arhitekture. Ovaj sistem bi trebalo da omogući procesima da dohvate sopstvene podatke i proslede ga kasnije softveru u cilju optimizacije. Trebalo bi da bude omogućeno i lakše dohvatanje grešaka u izvršavanju, koje garantuje tesniju vezu hardvera i softvera. Vremenom, dodavane bi bile i druge instrukcije za saradnju sa transakcionalnim memorijama, brzim sistemima za razmenu poruka i promenu konteksta za paralelizam na nivou niti. Implementacija LWP-a ne očekuje se pre 2010. godine, što znači da neće biti deo nastupajućeg čipa Barcelona. Detalji su objavljeni na sajtu developer.amd.com.

Kompanija GigaSpaces je ponudila gamu jako zanimljivih softverskih proizvoda. Iza slogana „Write once, scale anywhere” (piši jednom, deli bilo gde) krije se moćan softverski alat, platforma koja nudi mogućnost deljenja kôda na delove koji će se prilagoditi arhitekturi na kojoj se izvršavaju. Uz mogućnost korišćenja Plain Old Java Objects, .Net platforme ili C++ bez ikakvog potrebe za posebnim API-jem, ovo rešenje garantuje fleksibilan pristup rešavanju problema raspoređivanjem delova kôda na odgovarajuće niti i procese. Sa sajta kompanije www.gigaspaces.com mogu se preuzeti tri verzije ovog sistema. Prve dve, eXtreme Application Platform i Enterprise Data Grid, besplatne su za vreme probnog perioda od 30 dana, dok treća verzija, Community, nudi samo osnovne mogućnosti i potpuno je besplatna za korišćenje.

Na sajtu cag.csail.mit.edu/streamit naći ćete jedan zanimljiv projekat: programski jezik dizajniran za efikasno mapiranje delova aplikacija na velikom broju mikroarhitektura, uključujući jednoprocesorske sisteme, višejezgarne procesore i radne stanice. Razvijen na MIT-u, jezik i kompajler StreamIt trenutno služi za programiranje višejezgarne mašine na Univerzitetu u Masačusetsu, a u planu je njegova upotreba na komercijalnim Cell čipovima kompanija Sony, IBM i Toshiba za potrebe Sony Playstation 3 konzola.

• • •

Sekvencijalne aplikacije polako postaju prošlost u svetu savremenog softvera, a titulu vodećeg preuzimaju rešenja optimizovana za izvršavanje na višejezgarnim procesorima. Dugo je softver uživao povlašćenu ulogu u svetu informacionih tehnologija, sada je vreme za nove paradigme, nove ideje i realizacije. Tesna saradnja sa hardverom je neophodna i samo će vreme pokazati koji pristup donosi najefikasnije iskorišćenje savremenih procesora. Upravo je vreme i najznačajniji faktor u ovoj priči, jer svaki aspekt konkurentnog pristupa programiranju traži više vremena i u razvoju i u testiranju novih aplikacija. Ipak, dobit koju će ova revolucija doneti je zapanjujuća i definitivno vredi uloženog truda, novca i vremena.

Momir ĐEKIĆ

 
 AKCIJE
SK Case Chase: Kućište „Beogradska noć”

 AKTUELNOSTI
Slučaj OOXML

 NOVE TEHNOLOGIJE
Programi za višejezgarne procesore
Šta mislite o ovom tekstu?

 NA LICU MESTA
Otvaranje GameS prodavnice
„Imagine Cup 2007” finale, Koreja

 KOMPJUTERI I FILM
„Ratatouille”

Amdalov zakon
Nazvan po svom izumitelju Džinu Amdalu (Gene Amhdal), ovaj zakon predstavlja osnovu teorije paralelnog programiranja.
1

F+(1–F)/N
F (0<F<1) predstavlja procenat aplikacije koji se ne može paralelizovati, a N broj procesora (jezgara) koji se koristi. Pomoću ove formule možemo da izračunamo maksimalno ubrzanje sistema korišćenjem paralelnog programiranja na višeprocesorskim sistemima. Treba težiti maksimalnom smanjenju vrednosti F, ali i veoma niske vrednosti poput 0,1 daju maksimalni faktor 10 bez obzira na broj procesora koji se koristi.
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera