Superračunala
Superračunalo je računalo iznimne procesne moći i svako novo je vrhunac trenutne moći obrade, kapaciteta i brzine izvođenja operacija. Sam koncept predstavio je Seymour Cray je davne 1960 godine, prije nego što je šira javnost uopće imala potrebu i spoznaju o računalima. Razvojem računarstva i softverskog inženjerstva ona su zauzimala svoj tržišni udio, a Seymour je sa svojom privatnom tvrtkom Cray bio tržišni vođa. S godinama u igru stižu tržišni lideri na području računalnih tehnologija, poput IBM-a i HP-a. Superračunala su strojevi kratkog vijeka. Nešto što je danas superračunalo, uskoro će biti obično računalo. U početku, to su bila brza računala sa skalarnim procesorima, tipično deset puta brži od običnih računala. Sedamdesetih godina, većina proizvođača počinje koristiti vektorske procesore, osamdesetih počinje se ugrađivati nekoliko vektorskih procesora koji operacije izvode paralelno, a devedesetih počinje biti poznat koncept masivnog paralelizma sa tisućama običnih CPU. Danas se tipična superračunala sastoje od PowerPC procesora, Opteron ili Xeon. Njihova primjena je snažno zastupljena u zadacima sa koji zahtijevaju intenzivno računanje, primjerice problemi predviđanja vremena, istraživanje klime, molekularno modeliranje, fizičke simulacije, kvantna fizika, simulacije detonacije nuklearnih oružja i nuklearne fuzije i mnogi drugi. Jedan skup problema koji je zanimljivo izdvojiti su Grand Challenge problemi. GC problemi postavljeni su kasnih osamdesetih kako bi se uspostavilo istraživanje računala i komunikacija visokih performansi. To su fundamentalni problemi znanosti i inženjerstva sa širokom mogućnošću primjene. Primjerice to su:OpenCL
Današnji grafički procesori (GPU) postali su značajno fleksibilniji od svojih prethodnika i time su otvorili dodatne mogućnosti obrade visokog paralelizma. OpenCL je standard, odnosno paket API-ja koji omogućuju pristup do svih procesnih jedinica računala. Prvenstveno namijenjen za Mac računala, postao je otvoreni standard i omogućuje nevjerojatne performanse.Performanse superračunala
Svaka nova generacija grafičkih procesora omogućuje veću realnost, vjernost i razlučivost digitalno stvorenih slika. Svaka tvrtka grafičkih procesora želi dostaviti što jaču grafičku karticu, prema navedenim kriterijima kako bi korisniku omogućila bolji doživljaj virtualne stvarnosti. Vođeni takvom utakmicom GPU su postali moćni procesori sa snažnim procesnim moćima i visokim stupnjem paralelizma. GPU mogu renderirati milijarde piksela u sekundi. Svaki piksel je rezultat niza složenih matematičkih operacija. S računske perspektive, operacije koje izvršava GPU su na razini performansi superračunala. Nešto bolji grafički procesori imaju mogu izvrišiti oko jedan trilijun računskih operacija u sekundi (1000 GFlops).
Masivni paralelizma
Uz značajan porast računske moći grafičkih procesora došlo je i da velikog porasta posla koji GPU radi istovremeno. Kako prosječan monitor ima rezoluciju 1024×768 tipični grafički procesor se mora nositi s gotovo milijun i više piksela odjednom. Zbog toga čipovi GPU arhitekture sadrže veći broj elemenata za procesiranje piksela. Što je više tih elemenata svi potrebni proračuni se mogu brže izvršiti, čime je i čitava slika za ispis na zaslonu prije pripremljena. Najnoviji procesori simultano izvršavaju stotine operacija kako bi pripremili piksele za složene 3D scene naprednih grafičkih engine-a.Izvan grafičkih mogućnosti
Inicijalni grafički procesori su dizajnirani tako da bi implementirali programske standarde za grafičku obradu, primjerice OpenGL. Čvrsta povezanost između programskog jezika i internog rada čipova omogućila je visoke performanse za većinu grafičkih primjena. No, ta čvrsta veza je ograničila grafičke procesore samo na ono što je definirano u grafičkom jeziku. Kako bi se prevazišla ta ograničenja, arhitekti GPU-a omogućili su pristup do procesnih elemenata korištenjem specijaliziranih programa, shader-a (u daljnjem tekstu shader, shaderi). S vremenom, shaderi jednostavnih asemblerskih jezika evoluirali su u shadere s programskim jezicima više razine koji omogućuju razvoj bogatih scena današnjih najsloženijih 3D softvera. Kako bi to omogućili, arhitekti GPU-a su ugradili dodatne procesne mogućnosti poput općih matematičkih operacija, logike i operacija toka podataka. To je stvorilo nove prilike za povećanje brzine računanja.Hvatanje procesne moći grafičkih procesora
Programeri i proizvođači grafičkih procesora ubrzo su shvatili da je trend razvoja procesnih mogućnosti golem i da se otvara nova prilika za obradu izvan klasičnih grafičkih namjena. Sve što je potrebno je ne-grafički API koji bi omogućio pristup do te goleme procesne moći. Jedna od tehnologija je OpenCL. Ona svakoj aplikaciji daje sredstva za pristup performansi superračunala unutar GPU-a.OpenCL izbliza
OpenCL je razvijen od nule i omogućuje podizanje performansi aplikacije korištenjem GPU za izračune generalne namjene. To je okvir temeljen na C jeziku i omogućuje visok paralelizma. API koji omogućuje primjenu jednog ili više OpenCL uređaja (GPU, CPU).
OpenCL C
OpenCL koristi OpenCL C, koji je varijanta C99 jezika no nešto prilagođenog za GPU programiranje i podržava paralelno procesiranje. Za povećanje učinkovitosti OpenCL C sadrži veću podršku za vektorske tipove podataka i tokove podataka. Kako bi se zadržala matematička konzistentnost na GPU hardveru različitih dobavljača definiran je i zahtjev numeričke preciznosti prema standardu IEEE-754:2008. Kako bi se podigle performanse programa, OpenCL je namijenjen re-kodiranje metoda koje koriste veliku količinu podataka. Tijekom re-kodiranja, te metode se razbiju na elementarne dijelove koji se tada mogu paralelno izvršavati. Rezultirajući kod ovog postupka sličan je tradicionalnim C funkcijama, a naziva se OpenCL kernel.
OpenCL API
OpenCL API omogućuje aplikaciji upravljanje zadacima paralelne obrade, pobrojava OpenCL uređaje sustava, uspostavlja dijeljenje struktura podataka između aplikacija i OpenCL-a, upravlja kompiliranjem i slanjem kernela na GPU i ima bogat skup funkcija za upravljanje redovima i sinkronizacijama.OpenCL izvršavanje
Tijekom izvršavanja OpenCL učinkovito razmjenjuje podatke između glavne memorije računala i video memorije grafičke kartice. Također, upravlja izvođenjem kernela na GPU hardveru. Tijekom izvođenja, OpenCL runtime upravlja zavisnostima između kernela i upravlja GPU procesnim elementima za njihovu učinkovitiju upotrebu.OpenCL na djelu
Za vrijeme podizanja, aplikacija poziva OpenCL API-je kako bi odredila dostupne grafičke procesore. Nakon toga odabire prikladne GPU i kreira redove naredbi. Aplikacija učitava i kompilira OpenCL kernele koje će koristiti.

OpenCL standard
Iako je inicijalno sam razvio OpenCL Apple je odlučio da bi trebao otvoriti standard i u suradnji s drugim kompanijama mogao razviti bolji standard za paralelno programiranje GPU-a i CPU-a. S podrškom AMD-a, Intel-a i NVIDIA-e Apple je Khronos Group konzorciju predložio OpenCL kao novi standard. Time je OpenGL dalje razvijen za podršku DSP (digital signal processor) i druge specijalizirane procesne arhitekture. U prosincu 2008 godine ratificiran je kao otvoren standard.CUDA
Kao što je rečeno, prije nekoliko godina nešto domišljatiji programeri otkrili su mogućnost kako moćne grafičke procesore grafičkih kartica iskoristiti za druge namjene. Ti improvizirani programi su bili donekle nespretno izvedeni, a piksel shreaderi na čipovima nisu bili idealni za programiranje opće namjene. NVIDIA je uhvatila tu priliku kako bi dizajnirali bolje programske modele i poboljšali shreadere za opću primjenu. Na tržištu procesora visokih performansi, NVIDIA shreadere naziva procesorima toka ili dretvenim procesorima. Srećom, to nije samo marketinški trik, svaki taj dretveni procesor je GPU NVIDIA GeForce 8 serije koji može obraditi 96 konkurentnih dretvi. Svaki taj procesor ima svoj FPU (engl. floating point unit), registre i dijeljenu lokalnu memoriju.
Prikrivanje procesora
NVIDIA je uvijek skrivala arhitekturu svojih grafičkih procesora ispod API-ja. Time programeri nikad nisu imali direktni pristup do GPU-a. Takav pristup prikrivanja hardvera ima dvije prednosti. Prvo, jednostavnije je programiranje na višoj programskoj razini. Drugo, apstrakcija hardvera dopušta NVIDIA čestu i radikalnu promjenu GPU arhitekture.
Programiranje
Ono što je najprije potrebno je napraviti dobru analizu podataka, potrebno je rješenje izraziti u obliku C/C++ koda. CUDA nudi nekoliko specijaliziranih API poziva za paralelno procesiranje.

OpenCL vs CUDA?


nVidia Tesla
Tesla je serija posebnih računala koja su i do 250 puta brža od običnih PC računala, a dostupna su za gotovo jednaku cijenu. Svako računalo sadrži Tesla GPU s CUDA tehnologijom za masivni paralelizam, te uključuje alate za razvoj i API-je za najkorištenije jezike visokih performansi, C, C++, Fortran. Za ostale jezike postoje dostupni omotači, a uključena je i podrška za OpenCL i DirectCompute. Primjerice računalo sa 2 Intel Xeon Quad-Core procesora na 2.00GHz, 6 GB DDR3 RAM, 250GB HDD i NVIDIA Tesla C1060 GPU Computing Processor gen 2.0 košta oko $4.500,00. Nešto jača verzija sa 4 takva NVIDIA Tesla C1060 grafička GPU, dakle ukupno 940 jezgri, 2 Intel Xeon Quad-Core procesora na 2.13GHz, 12GB DDR3 RAM, 2TB HDD košta oko $9.000,00. Kako uzmemo u obzir procesne moći i cijene CPU superračunala dobivamo sjajan omjer. NVIDIA Tesla superračunala postižu brzine od 2 do 60 TFlops. Trenutno najbrže superračunalo na svijetu ima brzinu od 1700 do 2330 TFlops, Cray Jaguar i koštalo je oko milijun dolara. Superračunalo analogne brzine, napravljeno NVIDIA Tesla tehnologijom bilo bi gotovo 1/3 jeftinije. Brzine od 60 TFlopsa su za fakultete i znanstvenike sasvim prihvatljive, a za njihove financijske planove njihova cijena je još prihvatljivija.



FERMI
NVIDIA Tesla serije 20 je novost koja je tek nedavno predstavljena. Redizajnirana tehnologija specijalizirana za računarstvo visokih performansi. Nova serija kodnog naziva Fermi temelji se na CUDA GPU arhitekturi nove generacije, kako kažu u NVIDIA. Novosti se najviše tiču proširenja ciljanog tržišta NVIDIA – enterprise područje. Tehnologija uključuje ECC sustav za korekciju pogrešaka u memoriji, točnost i skalabilnost bez kompromisa, podrška za C++ preko Visual Studia, 8 puta brža dvostruka preciznost veća od Tesla 10 serije. U usporedbi s četverojezgrenim CPU, GPU Tesla serije 20 ima 20 puta veće performanse za 1/10 cijene. Također sadrži 512 GPU CUDA jezgri.Tesla vs Fermi

Simulacija tsunamija

Umjesto zaključka nekoliko video primjera OpenCL/CUDA tehnologije na djelu
First OpenCL demo on a GPU
Next Generation GPU Fluids - CUDA
Volumetric particle shadows - CUDA
NVIDIA PhysX Fluid Demo - CUDA
nBody CPU vs CUDA
Particle fluid simulation demo (SLI vs CPU vs dedicated CUDA PhysX)
nVidia vs. ATI
Literatura
Fakultet organizacije i informatike, Varaždin 2009 © Ivan Švogor