Elektrotehniški vestnik 79(1-2): 19-24, 2012 Existing separate English edition Implementacija modula r.cuda.los v odprtokodnem paketu GRASS GIS z vzporednim računanjem na grafičnih karticah NVIDIA CUDA Andrej Osterman Telekom Slovenije d.d., Cigaletova 15, 1000 Ljubljana, Slovenija E-pošta: andrej.osterman@telekom.si Povzetek. Pri uporabi geografskih informacijskih sistemov (GIS) se čedalje več uporablja vzporedno (paralelno) izračunavanje. Privlačna rešitev za vzporedno računanje so grafične enote z arhitekturo CUDA (Compute Unified Device Architecture). Osnova za članek je modul r.los za izračun optične vidljivosti (LOS - Line of Sight), ki je ze implementiran v okolju GRASS GIS (Geographič Resources Analysis Support System). Predstavljen je popolnoma nov modul r.cuda.los z isto funkčionalnostjo kot modul r.los. Zaradi morebitne uporabe modula r.cuda.los v radijsko planerske namene je dodana še moznost omejitve računanja po vertikalnem in horizontalnem kotu. Vidnost računamo po posameznih rezinah. Za izračun vsake rezine je določena svoja nit (thread) vzporednega pročesorja. Pri velikosti zemljevida 28161 x 17921 točk z ločljivostjo 12, 5mx 12, 5m, je čas računanja 18s. Pri vzporedni obdelavi podatkov GIS dobimo za en, dva ali čelo tri velikostne razrede hitrejšo izvedbo kot pri sekvenčni obdelavi. Ključne besede: CUDA, vzporedno računanje, GRASS GIS, GPU, vidnost, LOS, kartografija Implementation of module r.cuda.los into GRASS GIS Parallel čomputing is in expanding phase in GIS appličations. A very attračtive solution for parallel čomputing are the NVIDIA graphič čards, with a parallel čomputing platform and the CUDA (Compute Unified Device Architecture) programming model. The basis for this paper is the r.los module used to čalčulate optičal visibility (LOS - Line of Sight), whičh is already implemented in the GRASS GIS environment. A čompletely new r.cuda.los module with the same funčtionality as the r.los module is presented. By using the r.cuda.los module for radio planning purposes of limiting the čomputation along the vertičal and horizontal angle is also make possible. Visibility is čalčulated for eačh sliče. The responsibility for the čalčulation of eačh sliče is with its own thread from the parallel pročessor. At the size of the map of 28161 x 17921 points with the resolution 12, 5m x 12, 5m, the čomputation time is 18 s. In parallel čomputing the GIS data, the performanče čan be one, two or even three size člasses faster than in the sequential čomputing. 1 UVOD Uporaba geografskih informačijskih sistemov (GIS) je v vzponu. Kot pri drugih področjih se tudi tukaj čedalje bolj uveljavljajo odprtokodni paketi. V članku je za osnovo uporabljen odprtokodni paket GRASS GIS (Geographič Resourčes Analysis Support System) [1]. GRASS GIS je odprtokodno okolje, ki na enoten način omogoča urejanje geografskih podatkov in njihovo analiziranje, vsebuje pa tudi orodja za izdelavo zelenih storitev. Slaba lastnost posameznih orodij v GRASS Prejet 12. december, 2011 Odobren 12. marec, 2012 je njihova relativna počasnost izračunavanja. Počasnost izračunavanja izvira iz dejstva, da se v okoljih GIS uporabljajo relativno obsezne rastrske mape, na katerih je potreben izračun ter sekvenčni način računanja. V sekvenčnem načinu izračunavanja je čas, potreben za izračun neke funkčije, sorazmeren produktu izračuna same funkčije nad točko in števila točk (velikostjo zemljevida). Boljša moznost je vzporedno (paralelno) izračunavanje. Pri vzporednem računanju lahko čas računanja v dobršni meri skrajšamo na račun delov programa, ki jih lahko prevedemo v vzporedno računanje. Pri vzporednem računanju moramo odpraviti še nekaj drugih tezav, na katere pri sekvenčnem računanju ne naletimo, kot na primer sinhronizačija vzporednih opravil. Ena najbolj popularna rešitev v sedanjem času za vzporedno računanje so grafične enote z arhitekturo CUDA (Compute Unified Device Architecture). Nova arhitektura omogoča vzporedno pročesiranje (lahko tudi negrafičšnih matematičšnih problemov) na sami grafični kartiči ([2]). V članku se osredinimo na modul r.los za izračun optične vidljivosti (LOS - Line of Sight), ki je ze implementiran v odprtokodnem okolju GRASS GIS. Sekvenčni modul r.los izračuna polje vidnosti opazovalča. Glavni vhodni podatek je digitalni zemljevid visšine terena (DEM - digital elevation model). Modulu moramo podati tudi točko interesa oz. opazovanja (koordinato x,y), višino opazovanja nad terenom in maksimalno razdaljo opazovanja oz. računanja (max_dist). Sekvenčni modul r.los je sorazmerno počasen za računanje. Zaradi dolgega računanja postane tako rekoč neuporaben nad maksimalno razdaljo opazovanja več kot 40 km pri digitalnem zemljevidu ločljivosti 100 x 100 m, saj je čas računanja več kot 30 s. V tem članku predstavimo nov modul za računanje vidnosti (LOS - Line of Sight). Modul pridobi vstavek cuda in se imenuje r.cuda.los. Uporabljeno je vzporedno računanje na grafični kartiči NVIDIA. Izkaze se, da je vzporedni modul r.cuda.los sposoben izračunati vidnosti za faktor od 10 do 1000 hitreje od sekvenčnega modula r.los. Glavni časovni faktor pri uporabi modula ni več računanje, temveč branje in zapisovanje digitalnega zemljevida iz trdega diska v sistemski spomin gostitelja ter naprej na globalni spomin GPE. Velja tudi, da moramo izračunane podatke zopet prenesti iz globalnega spomina GPE (grafične pro-česne enote) v sistemski spomin, iz sistemskega spomina pa jih je treba zapisati na trdi disk. Zaradi morebitne uporabe modula r.cuda.los v radijsko planerske namene (hitra očenitev, kaj antena 'vidi') so dodani se parametri za azimut, obseg azimuta (horizontalni kot sevanja 'antene'), nagib (angl. tilt) in obseg nagiba (vertikalni kot sevanja 'antene'). Modul se uspesno uporablja pri začetnem planiranju radijskega sektorja v mobilni tehnologiji. Članek je organiziran takole: v poglavju 2 je najprej na kratko opisana priprava digitalnega zemljevida višine terena. Poglavje 3 govori o pripravi globalnega spomina. Poglavje 4 razdela geometrijo posamezne rezine (niti) pri računanju vidnosti. Srče programa, sčepeč je opisan v poglavju 5. Tu je podana tudi okrnjena koda sčepča. V poglavju 6 so podani rezultati izračuna in primerjava med sekvenčnim modulom r.los ter modulom r.cuda.los. V poglavju 7 podam razpravo, prednosti in slabosti nove implementačije. Opisane so tudi mogoče izboljssave novega modula. 2 Priprava digitalnega zemljevida Digitalni zemljevid višine terena (angl. digital elevation map - DEM) je shranjen na disku v rastrski obliki. Vsebino digitalne mape je treba prebrati v spomin gostitelja ter nato prenesti na napravo GPE. Na napravi GPE se izvede vzporedno računanje nad podatki. Po končanem računanju je treba rezultat prenesti iz naprave GPE v spomin gostitelja ter nato zapisati rezultat na trdi disk. Branje in pisanje na trdi disk je izvedeno s klasičnima C-funkcijama fread() in fwrite(). Prenos podatkov z gostitelja na napravo GPE in nazaj je izvedeno s funkcijama cudaMemcpyHostToDevice() in cudaMemcpyDeviceToHost(). Izkaze se, da večino računalniškega časa (več kot 90 %) porabijo zgoraj omenjene funkčije. Te funkčije so sekvenčšne in opravljajo prenasšanja podatkov z enega medija na drugega. Vzporedno računanje na podatkih pa se izvede na napravi GPE. 3 Priprava spomina Vhodni digitalni zemljevid ima dimenzijo R * C, pri čemer je R število vrstič, C pa je število stolpčev. Vsaka točška zemljevida vsebuje čelosštevilčšno vrednost (v dveh ali sštirih zlogih), ki pomeni nadmorsko visšino. Videz vhodnega spomina je prikazana na sliki 1. vhodni spomin 0 vhodni spomin 1 vhodni spomin 2 (xobs'yobs'hobs + hpoi) TOČKA INTERESA vhodni spomin 3 | | Točka v vhodnem spominu (int ali short) -Rezina od točke interesa do robne točke O Točka interesa, lokacija opazovalca Slika 1: Vhodni spomin Ce je digitalni zemljevid večji od priblizno poloviče razpolozljivega spomina na grafični kartiči, moramo digitalni zemljevid razdeliti na več pasov. Računanje na grafičšni kartiči izvedemo najprej s tistim pasom, kjer je točška, iz katere nas zanima izračšun vidnosti. Vrstni red računanja je v našem primeru: vhodni spomin 2; vhodni spomin 1; vhodni spomin 0; vhodni spomin 3. Omenjeni spomin je na kartiči tako imenovani globalni spomin. To pomeni, da lahko do tega spomina katerakoli nit iz kateregakoli bloka enakovredno dostopa. Prav zato ni pomembno, kako so niti organizirane v bloke. Za izhodni digitalni zemljevid (kjer bo shranjen rezultat) predvidimo enako velikost R * C. Pred tem ga moramo zapolniti z vrednostmi null, kar se najhitreje lahko naredi z vzporednim račšunanjem. Poleg tega pa moramo rezervirati še štiri double vektorje {Vn,Vs,Vw,Ve}. Vw,Ve imata R elementov, Vn,Vs imata C elementov. V te sštiri vektorje shranjujemo začšasne vertikalne kote, enote pa so v radianih. Pred začetkom računanja vse elemente vseh sštirih vektorjev napolnimo z vrednostjo —n/2. Ta vrednost pomeni pogled v tla s strani opazo-valča. Pogled naravnost proti horizontu ima vrednost 0, pogled navpično navzgor pa vrednost n/2. 4 Računanje vidnosti po posameznih REZINAH Vidnost račšunamo po posameznih rezinah, in sičer vedno začnemo pri točki, ki nas zanima (Point of Interest), in se po vnaprej izračunanem koraku premikamo do točke ............................m ..................... izhodni spomin 0 izhodni spomin 1 Yobs'hobs + hpoi) TOČKA INTERESA izhodni spomin 2 izhodni spomin 3 Ve d = \J(xobs - xd)2 + (yobs - yd)2 (1) (xd,yd,hd - hc) TOČKA INTERESA točka interesa vidno območje Slika 3: Rezina a je kot (angl. tilt), pod katerim opazovalec vidi točko (xd,yd). hd je nadmorska višina tocke (xd,yd). Nadmorska višina, kjer stoji opazovalec, je označena s Višina opazovalca nad tlemi pa je hpoi. arctan ((hd — hc) — (hobs + hpoi) I d (2) povprečno oddaljenost od središče Zemlje za zeleno območje, nastane napaka na četrti decimalki). (hc + r earth)2 = d2 + r2earth (3) hc = V d2 + riarth — rearth ..........................J ............................... Vs I | Točka v izhodnem spominu (int ali short) I I Trenutni naklon v robnem vektorju (double) -Rezina od točke interesa do robne točke O Točka interesa, lokacija opazovalca Slika 2: Izhodni spomin in naklonski vektorji na robu digitalnega zemljevida (glej sliko 2, rdeče črte od POI proti robu zemljevida). Za izračun vsake rezine je določena svoja nit (thread) vzporednega procesorja. V posamezni rezini za vsako točko izračunamo razdaljo d od začetne točke (enačba (1)). (xobs,yobs) je koordinata opazovalca, (xd, yd) je koordinata trenutne točke, ki jo račšunamo. d je razdalja med tema dvema točškama. V element vektorja V[tid], ki pripada končni točki rezine, vpišemo novo vrednost vertikalnega kota a takrat, ko je nova vrednost večja od ze zapisane vrednosti. Hkrati pa dotično točko v izhodnem digitalnem zemljevidu označimo kot vidno (vpišemo vrednost vertikalnega kota, pod katerim jo vidimo). Ce pa je vertikalni kot a manjši od vpisane vrednosti v vektorju, ne vpišemo v dotično točko nič (pred tem je ze vpisana vrednost null). Tako imamo v vidnih točkah vpisane vrednosti kota. V točkah, ki niso vidne, je vpisan null element. Ce izhodni digitalni zemljevid zapisujemo v celoštevilčnem formatu, izračunu prištejemo vrednost n/2 in pomnozimo z 105. Za vsako točško rezine izračšunamo tudi vertikalni kot a (enačšba (2)), pod katerim bi bila (je) vidna točška (slika 3). Enačba (2) ima korekcijski faktor višine hc. Ta nastopa zaradi ukrivljenosti Zemlje (slika 4), izračunamo ga s pomočšjo enačšbe (3). V tej enačšbi vzamemo za premer Zemlje povprečno vrednost 6370.997 km in ne upoštevamo nadmorske višine opazovalca (če vnesemo Slika 4: Popravek višine zaradi ukrivljenosti Zemlje 5 Realizacija programa, ščepec Poenostavljena izvorna koda ščepca (angl.kernel, osnovni gradnik vzporednega programa, ki se izvaja na arhitekturi CUDA [2] ) za izračun vidnosti, je izpisana spodaj. Na začšetku vsaka nit dobi svoj indeks (tid). Organizacija niti po blokih v tem primeru ni pomembna, ker niti med seboj neposredno ne sodelujejo. Hkrati pa se za shranjevanje digitalnega zemljevida uporablja globalni pomnilnik, do katerega imajo vse niti enakovreden skupen dostop. Slabost globalnega pomnilnika je relativna počasnost dostopa z latenco nekaj 10 urnih period [2]. Vendar tu ni drugih mozšnosti zaradi velikosti digitalnih zemljevidov. Vse vhodne podatke, ki se med delovanjem sščšepča ne spreminjajo (maksimalna razdalja, omejitev azimuta, n w d a omejitev naklona ...), vpišemo v tako imenovani konstantni spomin (_constant_). Izkoriščen je indeks threadIdx.y, ki pomeni tako-imenovane štiri podniti. Namenjen je za nastavljanje in izvrševanje računanja reZnjev na severno, juZno, zahodno in vzhodno stran digitalnega zemljevida. Na začetku izračunamo korak pomika od točke POI do robne točke zemljevida (xstep in ystep). V kodi ni podan izračun predznaka koraka pomika, odvisen pa je od tega, v katero smer od točške POI se pri izračunu gibljemo. Glavna zanka dejansko pelje spremenljivki x in y od točke POI proti robni točki v smeri x s korakom xstep in v smeri y s korakom ystep. Znotraj glavne zanke se izračuna razdalja d, kot a in popravek višine hc za vsako točko v reznju. V originalni kodi se izračuna še azimut (kot proti severu), na podlagi katerega lahko omejimo računanje (če je tako nastavljeno z vhodnimi parametri). Kot a nazadnje primerjamo z vrednostjo vpisano v elementu vektorja V[tid]. Ce je kot a večji od kota vpisanega v elementu vektorja V[tid], je trenutna točka računanja (x, y) vidna in zato vpišemo kot a v izhodno datoteko. Število niti v ščepču je odvisno od velikosti digitalnega zemljevida. Število niti je N = 2 * C + 2 * R, pri čemer je C število stolpčev in R število vrstič v vhodnem digitalnem zemljevidu. Kako so niti organizirane v bloke, v tem konkretnem primeru ni pomembno, ker vse niti uporabljajo globalni spomin na GPE. ti d = threadIdx . x + blockldx.x * blockDim.x; x_step = 1.0; y_step = 1.0; switch ( threadldx.y ) { case 0: if (tid >cols) return ; x_end=tid ; y_end = 0; V=V_n; x_step = fabs ((x_end — x_obs )/(y_end — y_obs)); break ; case 1 : if (tid >cols) return ; x_end=tid ; y_end=rows ; V=V_s; x_step = fabs ((x_end — x_obs )/(y_end — y_obs)); break ; case 2: if (tid>rows) return ; x_end = 0; y_end=tid ; V=V_w; y_step = fabs ((y_end — y_obs )/( x_end — x_obs)); break ; case 3: if (tid>rows) return ; x_end=cols ; y_end=tid ; V=V_e; y_step = fabs ((y_end — y_obs)/(x_end — x_obs)); break ; tilt =— PI/2.0; // loop from POI to edge point for (x=x_obs , y=y_obs ; (x<=cols ) and (y<=rows); x+=x_step ,y+=y_step) { d=sqrt ((x—x_obs )*(x—x_obs) +(y—y_obs)*(y—y_obs)); h_c=sqrt (d*resol*d*resol +63 70997.0*63 70997.0) — 6370997.0; h=read_input_map (x , y ); h=h—h_c; alpha = atan ((h—h_obs )/d); if (alpha > (V[ tid ] — 0.00005) ) { write_output_map (x ,y , alpha ); if ( alpha > V[ tid ] ) V[ tid ]= alpha ; } // POI red color if(d<2.5) { write_output_map(x,y,PI/2); } } __syncthreads (); 6 Primerjava r.los in r.cuda.los Modul r.cuda.los poženemo iz terminalne vrstice podobno kot modul r.los. Oba modula sta testirana na osebnem PC računalniku, na katerem tece Linux. Grafična kartica je NVIDIA GeForce GTX 560Ti, CPU je Intel Core(TM) Duo CPU E8200 @ 2.66GHZ, velikost spomina je 2.0 GiB. Graficna kartica NVIDIA GeForce GTX 560Ti ima naslednje za nas pomembne lastnosti: - globalni spomin: 1024 MB - število jeder: 336 - najvecje število niti na blok: 1024 - verzija: 2.1 Podrobnejši podatki o omenjeni graficni kartici se nahajajo na spletni strani [8]. Na sliki št. 5 je prikazan primer izracuna z modulom r.los na digitalnem zemljevidu z locljivostjo 25mx 25m. Maksimalna razdalja izracuna je 10 km, višina opazovalca pa 20 m. Isti izracun je narejen z novim modulom r.cuda.los (slika št. 6). Obe sliki se po obliki ne razlikujeta. Namerno sta obarvani z razlicšnimi barvami, kar je narejeno z modulom r.color. Na sliki št. 6 tople barve (rumena, oranzna, rdeca) pomenijo pogled opazovalca nad crto navideznega horizonta (negativni naklon, angl.tilt), hladne barve (svetlo modra, temno modra) pa pogled opazovalca pod cšrto navideznega horizonta (pozitivni naklon, angl.tilt). V tabeli 1 je prikazana primerjava casa izvrševanja obeh modulov. Prikazana je kombinacija s tremi razlicnimi vhodnimi zemljevidi s tremi razlicnimi locljivostmi (100mx 100m, 25mx 25m in 12,5mx 12,5m). Za vsako locljivost je vzeta kombinacija štirih razdalj, do katere racunamo (parameter max_dist), in sicer 5 km, 10 km, 20 km } in 50 km. Cas računanja za posamezne kombinačije je podan v sekundah. Modul r.los za računanje na veliko točkah (daljše razdalje oz. srednje razdalje z bolj podrobno ločljivostjo) ni več primeren, ker je čas računanja praktično neuporaben (na tabeli označeno s pomišljajem). Z modulom r.cuda.los lahko računamo vidnost čez območšje čelotne Slovenije na zemljevidu velikosti 28161 x 17921 točk z ločljivostjo 12, 5mx 12, 5m, čas računanja je okoli 18 s. Tabela 1: Primerjava časa računanja modulov r.los in r.čuda.los Map [m x m] max_dist r.los r.cuda.los 100m x 100m 5 km 0.1 s 0.05 s 10 km 0.2 s 0.06 s 20 km 2.2 s 0.09 s 50 km 44 s 0.15 s 25m x 25m 5 km 2.4 s 0.3 s 10 km 30 s 0.3 s 20 km 511 s 0.6 s 50 km - 1.3 s 12.5m x 12.5m 5 km 32 s 0.7 s 10 km 516 s 1.2 s 20 km - 3.1 s 50 km - 6.8 s Slika 5: Izračun vidnosti z modulom r.los 7 Razprava in sklep Kdorkoli se je ze kdaj srečal z okolji GIS, ve, da je priprava geografskih podatkov natančno, vestno, predvsem pa čšasovno zamudno delo. Vsaka premisšljena poteza pri pripravi podatkov se pozneje obrestuje s hitrejsšo in lazšjo obdelavo podatkov. Vendar pa je zelo pomemben dejavnik tudi samo račšunanje nad podatki. Slika 6: Izračun vidnosti z modulom r.čuda.los Ključno vlogo igra pri tem ustrezna strojna oprema, ki pa mora biti podprta z optimalno programsko opremo. Obdelava geografskih podatkov kar kliče po vzporednem računanju. Ce primerjamo sekvenčno in vzporedno obdelavo podatkov GIS, lahko dobimo pri vzporedni obdelavi za en, dva ali čelo tri velikostne razrede hitrejsšo izvedbo! Cš lanek [2] govori na splosšno o arhitekturi CUDA. Poleg strokovne vrednosti ima ta čšlanek tudi velik pomen zaradi slovenskega izrazoslovja v tej novi veji tehnike. V okolju GRASS-GIS je bilo ze nekaj raziskav o vzporednem računanju. Ena izmed njih je [3], kjer so vzporedno računanje reševali z grozdom streznikov, kjer vsak strezšnik naredi eno nalogo. V članku [4] je opisan splošni način programiranja GIS v CUDA s primerom na filtru za povprečenje (angl.meanfilter). V čšlanku [5] je opisana implementačija transformačij projekčij digitalnih zemljevidov s pomočšjo CUDA. Cš lanek [6] sičer ne opisuje vzporednega račšunanja, vendar se skupina ze ukvarja z implementačijo svojih modulov na vzporedni načšin račšunanja. Pričujoči članek ne obravnava splošnega problema migračije iz sekvenčšnega na vzporedni načšin račšunanja, temveč se omeji na konkretno nalogo: izboljšanje obstoječega modula r.los. Verjetno bo splošen preskok na vzporedni način računanja nastal s časom, ko bo več konkretnih modulov 'migriralo' na vzporedni način računanja. Za modul r.los je na spletu prosto dostopna izvorna koda. Kljub temu je modul r.cuda.los popolnoma na novo narejen. Oba modula izračunata enak rezultat ter oba uporabljata datotečšni načšin zapisovanja podatkov GRASS. Klič programa je za oba modula prečej podoben. Velika večšina argumentov je enakih, pri r.cuda.los je nekaj argumentov dodanih za nastavitev dodatne funkcionalnosti. Novi modul r.cuda.los je pisan za CPU in GPE. Prevajalnik za to je nvcc (namesto gcc za GRASS). GRASS ima izredno učinkovito narejeno ogrodje za izdelavo modulov. To ogrodje vsebuje tudi GUI za zagon samega modula s pripadajočim ogrodjem za pomoč pri uporabi modula. Za zdaj novi modul r.cuda.los ni zdruzen s tem ogrodjem, zato ga lahko pozenemo samo prek komandne vrstice. Pri novem modulu se omejimo na dva načina zapisa vhodnega in izhodnega zemljevida. Modul lahko prebere nestisnjeni način zapisa v obliki int ali short. Rezultat (izhodni zemljevid) dobimo v enaki obliki, kot so vhodni podatki (vhodni zemljevid). Tu se pokaze slabost trenutne implementačije, saj v izhodno datoteko vpisujemo samo čeloštevilčne vrednosti. Ce imamo majhne vrednosti (kot v našem primeru, kjer zapisujemo kota a z vrednostmi —n/2 do n/2), mora biti vpisana vrednost skalirana (pomnozena npr. z 105). Zapis v obliki double se čaka na implementačijo. Ce je vhodni zemljevid zapisan v stisnjeni obliki, ga moramo pred tem razširiti z modulom r.compress. Iz tabele 1 vidimo, kakšna prednost nam prinese vzporedno računanje. Tabela prikazuje čas izvajanja modula r.los in modula r.cuda.los glede na vhodne podatke. Modul r.los postane zelo počasen pri velikih vrednostih max_dist. Vidimo, da postane zelo počasen pri vrednostih večjih od 50 km za digitalne zemljevide z ločljivostjo 100mx 100m, ter pri vrednostih max_dist večjih od 5 km za zemljevide z ločljivostjo 12.5mx 12.5m. Modul r.cuda.los ima še kar nekaj moznosti za izboljšave. Predvsem je treba izboljšati časovno potratno branje digitalne mape z diska in nazaj. Ena izmed mozšnosti je zapis digitalne mape v stisnjeni obliki. Za enoto GPE bi bilo treba v tem primeru napisati sščšepeč za hitro iskanje vrednosti točk iz stisnjene oblike zapisa. Vsekakor je vzporedno računanje prihodnost za sisteme GIS. Izvajanje operačij bo pohitril vsaj za velikostni razred. [5] Yanwei Zhao, Zhenlin Cheng, Hui Dong, Jinyun Fang, Liang Li, Institute of Computing Technology, Chinese Academy of Sciences, Graduate University of Chinese Academy of Sciences FAST MAP PROJECTION ON CUDA, Geoscience and Remote Sensing Symposium (IGARSS), 2011 IEEE International. [6] Andrej Hrovat, Igor Ozimek, Andrej Vilhar, Tine Celcer, Iztok Saje, Tomaz Javornik, An Open-Source Radio Coverage Prediction Tool, Department of Communication Systems, Jozef Stefan Institute, Mobitel, d.d. ISSN: 1792-4243, ISBN: 978-960-474200-4 [7] Jasons Sanders, Edward Kandrot, CUDA by Example, Addison-Wesley, 2011 [8] NVIDIA GeForce GTX 560 Ti, http://uk.geforce.com/hardware/desktop-gpus/geforce-gtx-560ti Andrej Osterman je diplomiral leta 1991 na Fakulteti za elektrotehniko Univerze v Ljubljani z naslovom diplomske naloge: Grafični prikaz antenskih smernih diagramov v programskem jeziku C++. Zaposlen je v podjetju Telekom Slovenije, d.d., Sektor za radijsko omrezje. Ukvarja se s statistikami na mobilnem omrezju, orodji GIS ter programiranjem v odprtokodnih sistemih. Literatura [1] GRASS GIS, http://grass.fbk.eu [2] Tomaž Dobravec, Patricio Bulic, Strojni in programski vidiki arhitekture CUDA, Elektrotehniški vestnik 77(5): 267-272, 2010 [3] Fang Huang, Dingsheng Liu, Peng Liu, Shaogang Wang, Yi Zeng, Guoqing Li, Wenyang Yu, Jian Wang, Lingjun Zhao, and Lv Pang, Chinese Academy of Sciences, Beijing, China, Northeastern University, Shenyang, China Research On Cluster-Based Parallel GIS with the Example of Parallelization on GRASS GIS , Grid and Cooperative Computing, 2007. GCC 2007. Sixth International Conference on [4] Yong Zhao, Zhou Huang, Bin Chen, Yu Fang, Menglong Yan, Zhenžhen Yang, Institute of Remote Sensing and Geographic Information System, Peking University Local Acceleration in Distributed Geographic Information Processing with CUDA, Geoinformatics, 2010 18th International Conference on.