• Za boljše rezultate se spustite na nižji nivo programiranja
Novice

Želite izboljšati delovanje svojih programov? Če je odgovor da, ne smete zamuditi predavanja o optimizacije kode »Code optimization on modern processors« v okviru serije Čez glavo v blatu, ki bo 30. oktobra ob 18. uri na FRI.

Z Dejanom Črnilo, programskim inženirjem iz podjetja Dewesoft, ki se bo na predavanju poglobil v male in velike skrivnosti optimiziranja kode, smo na kratko spregovorili o tem, zakaj in kdaj se lotiti optimizacije, ter o tem, kaj nas čaka na predavanju.


Osrednja tema vašega predavanja bo optimizacija kode. A obrnimo prvo vprašanje v drugo smer. V katerih primerih lahko moč današnjih procesorjev odtehta dobro napisano kodo? Kdaj se z optimizacijo ni smiselno ukvarjati?

Dejstvo je, da so današnji računalniki zelo močne in kompleksne naprave. Hitrejše izvajanje programov lahko zelo enostavno dosežemo z zamenjavo strojne opreme. Vendar je to načeloma zelo drago, zato je bolje, če lahko program optimalno izkorišča vse možnosti, ki jih ponuja strojna oprema. S tem postane programska oprema veliko bolj konkurenčna na trgu.

Zelo pomembno je, če znamo oceniti, kakšno pohitritev nam bo določena optimizacija prinesla. Npr. če uporabnik določenega programa čaka na rezultat nekega postopka 20 sekund, mu prav veliko ne bomo pomagali, če bomo ta čas znižali na 19 sekund. V kolikor pa pohitrimo izvajanje postopka na 10 sekund, potem je to že zelo opazna sprememba. Po drugi strani pa je uporabniku lahko tudi vseeno, ali na določeno operacijo čaka npr. 10 ms ali 1 ms. Pri optimizaciji je vedno treba oceniti, koliko pridobimo v primerjavi z vloženim časom oziroma stroškom in kaj to prinese uporabniku.

Moramo pa poudariti, da optimizacija pogosto pokvari izgled in berljivost kode. Na odločitev, ali optimizirati dele kode, torej vpliva več dejavnikov, ki jih je treba preučiti in se pravilno odločiti. Tukaj zelo veliko vlogo predstavljajo izkušnje programskega inženirja.

 

V podjetju Dewesoft se ukvarjate z razvojem merilnih inštrumentov, kar vključuje strojno in programsko opremo. Kdaj in kje v procesu razvoja se lotite optimizacije kode?

Na splošno se vsi strinjamo, da je treba optimizirati v zaključnih fazah razvoja. Optimiziramo namreč tiste dele kode, ki porabijo največ časa. Porabe časa pa ne moramo izmeriti, dokler niso vsi deli kode na svojem mestu. Obstajajo pa seveda izjeme. V naši industriji je uspeh projekta pogosto odvisen od tega, ali lahko zajamemo in procesiramo določeno količino podatkov na časovno enoto. Če lahko tudi ocenimo, kateri deli kode bodo vzeli največ časa pri izvajanju, je smiselno izdelati prototipno optimizacijo določenih delov kode že v zgodnji fazi razvoja. Nihče si namreč ne želi, da v zaključnih fazah razvoja ugotovimo, da zastavljenega cilja ni mogoče doseči.

V večini primerov torej optimiziramo v zaključni fazi razvoja, vendar pa je zelo pomembno, da v vseh fazah razvoja vsaj razmišljamo o možnih optimizacijah kode. Arhitekturo programske opreme je torej treba načrtovati tako, da jo bo možno kasneje optimizirati. V kolikor uporabimo napačne pristope se lahko zgodi, da optimizacija sploh ne bo možna oziroma da bo zelo draga, saj bo treba na novo postaviti arhitekturo.

 

Katere tehnike optimizacije kode pri vašem delu dajejo najboljše rezultate? Pojasnite nam na kratko, na kakšen način z njimi izboljšate delovanje že tako zmogljive tehnologije, sodobnih procesorjev?

Še nekaj let nazaj je veljalo, da se zmogljivost računalnikov podvoji vsako leto ali dve. Danes ni več tako, zato je toliko bolj pomembno, da čim bolje izkoristimo, kar nam moderni procesorji ponujajo. Predvsem se danes vse vrti okrog paralelnega reševanja problemov. Seveda niso vsi problemi paralelno rešljivi. Za tiste, ki pa so, nam procesorji ponujajo kar nekaj možnosti, kako jih hitreje izračunati. Poleg običajnega večnitnega programiranja v našem podjetju veliko pozornosti posvečamo t.i. vektorizaciji, pri čemer se uporabljajo ukazi SIMD, ki sočasno izvedejo določeno operacijo na večih operandih. S takšnimi optimizacijami nam je uspelo dobiti kar nekaj pomembnih projektov po celem svetu.

 

Od leta 2001 ste programski inženir v podjetju Dewesoft. Imate veliko izkušenj z delom na vrhunski ravni. Kaj od tega boste v okviru tokratnega predavanja delili z udeleženci – strokovnjaki iz drugih podjetij, raziskovalci in študenti. Kaj jim želite predati?

V zadnjih leti opažamo trend, da se vedno več mladih programerjev ukvarja z izdelavo spletnih in mobilnih aplikacij v visokonivojskih orodjih. S tem sicer ni nič narobe, saj so ta orodja zelo zmogljiva in nam omočajo hitro in kakovostno izdelavo programske opreme. Pa vendar se je za zagotavljanje kakovostne in konkurenčne programske opreme občasno treba spustiti na nižji nivo programiranja, kjer so zelo pomembna znanja in izkušnje iz arhitekture računalniških sistemov, operacijskih sistemov, prevajalnikov itd. Programskih inžinirjev s takšnimi izkušnjami na splošno primanjkuje, zato bi na predavanju rad pokazal, kako lahko z optimizacijo doprinesemo k bolj konkurenčni programski opremi.

 

Vabljeni na predavanje, v ponedeljek, 30. oktobra, ob 18. uri v predavalnici P22 na FRI! Prijavite se na Meetup.com.