Hitrost računalnika in “virtualne živalice”

Današnji prispevek nima hude uporabne vrednosti, ponuja pa zanimiv pogled na moč današnjih računalnikov.

V zadnji številki reviji ŽIT (Življenje in tehnika) je tudi članek o evolucijskih algoritmih. Ker se s to vedo računalništva nisem ukvarjal vse od programiranja prvih preprostih programov in posledično tki. ‘Igre življenja’, sem članek z veseljem prebral.

Čisto tako vmes: ‘Igra življenja’ je zelo preprost računalniški algoritem, kjer je svet predstavljen kot 2D mreža. V vsakem polju na mreži lahko »živi« organizem. V kolikor je ob njem še en organizem, potem naslednjo generacijo preživita oba in mogoče ustvarita novega potomca, če ob njem ni nobenega organizma potem pogine zaradi osamljenosti, če je ob njem preveč organizmov pogine zaradi prenaseljenosti… V glavnem, kot programer imate na voljo različne pogoje in s tem nadzorujete kako »vaš svet« živi.

Če se torej povrnem k tematiki. Ko sem prebral članek, ki je sicer resnici na ljubo čisto prekratek in ne pove kaj veliko, me je prešinilo vprašanje: “Kako hitro pa lahko kaj dandanes simuliramo življenje v računalniku?”.

V svetu evolucije ima mati narava pač na voljo generacije živih biti, da se »izživlja« nad njimi in nad nekaterimi lahko to hitro počne (recimo vinske mušice imajo zelo kratko življenjsko dobo in zato lahko ima vsak dan novo generacijo). Po drugi strani pa ljudje potrebujemo kar 20 let za novo generacijo (no dandanes se to pomika proti 30 let). Kako hitro pa lahko dandanašnji računalnik torej simulira življenje oz. posamezne generacije?

Seveda je to čisto presplošno vprašanje in odgovora nanj niti ne gre iskati, saj je predvsem pomembno koliko dela mora opraviti nek algoritem da ustvari novo generacijo. To vprašanje je torej presplošno, je pa zanimivo kako hitri pa so današnji računalniki v primerjavi z nečim, kar je nam blizu oz. s čimer se lahko poistovetimo.

V našem svetu je nekako 1 sekunda minimalni čas neke akcije. Predpostavimo torej da sestavljamo kocke in vsako sekundo smo sposobni zložiti dve kocki. Sedaj pa si predstavljajo računalnik, ki ravno tako opravlja neke naloge in v neki enoti je sposoben opraviti minimalno delo. Kakšna je torej tista minimalna enota v kateri je računalnik sposoben opraviti neko delo?

V računalniku je glavno božanstvo »ura«, ki udarja in vsak udarec ure (CPU cikel), računalnik izvede eno operacijo. (Seveda to spet ni čisto res, saj je dandanašnji računalnik sposoben v enem ciklu narediti celo več kot 1 operacijo a pustimo takšne »malenkosti« in se osredotočimo na zanimivosti). Hitrost računalnika pa merimo ravno v hitrosti njegove ure in hitrejša kot je ura hitrejši je računalnik (spet ne bodimo dlakocepski!).

No in sedaj si končno poglejmo kako hitro tiktaka nek čisto povprečen računalnik. V času pisanja tega prispevka lahko za 200EUR kupimo namizni računalnik, ki tiktaka s hitrostjo 3,6GH. Torej 3,g »gigahercov« ali 3.600.000.000 cikov na sekundo! Računalnik za 200EUR torej v eni sekundi opravi vsaj 3600 milijonov operacij.

Seveda pa računalnik ne more oz. vsaj ni smiselno da dela kar nekaj brezveze zato mora navodila, kaj naj počne, dobivati iz svoje okolice. Predstavljamo si, da je računalnik človek, ki sedi za mizo in opravlja pisarniško delo, ki je zapisano na listih, listi pa se nahajajo na njegovi mizi, v predalih mize, v omarah v sobi, v drugih sobah, v drugih hišah, v drugih mestih…. Na drugih planetih.

Računalniku najbližje so njegovi registri, ki jih ni ravno veliko (nekaj 10) in od njih dobi nov list v enem samem ciklu – to je torej enakovredno listu na mizi. Naslednje področje, ki mu lahko dostavi list je tki. L1 predpomnilnik. Do njega potrebuje 4 cikle in to bi predstavljalo predal ob mizi. Potem je L2 predpomnilnik do katerega potrebuje 10 ciklov, pa L3 predpomnilnik, do katerega potrebuje 70 ciklov in šele potem pride tisto, ker vsi poznate – to je glavni pomnilnik računalnika (famozni RAM) in za dostop do njega potrebuje računalnik nekaj 100 ciklov.

Da bi se ni izgubljali v besedilu si poglejmo kar tabelo z dostopi. Seveda so vsi podatki v tabeli približni (za vse »ne-fizike« še hitra ponovitev časovnih enot: 1s = 1.000 ms (milisekund) == 1.000.000 mikrosekund = 1.000.000.000 ns (nanosekund))

Dostop Št. cikov Porabljen čas
Register 1 0,3ns
L1 predpom. 4 1,2ns
L2 predpom. 10 3ns
L3 predpom. 70 21ns
RAM 400 120ns
SSD disk 400.000 120.000ns
»navaden« disk 15.000.000 4,5ms

Ok. S to tabelo smo izčrpali vse, ki računalniku lahko dajejo ukaze in se nahajajo v njegovi škatli. Ob tem pa smo uvideli tudi, da je razmišljanje v ciklih utrujajoče, zato se preusmerimo samo na čas in si poglejmo dostop do drugih računalnikov in interneta

Dostop Porabljen čas
Register 0,3ns
L1 predpom. 1,2ns
L2 predpom. 3ns
L3 predpom. 21ns
RAM 120ns
SSD disk 120.000ns
»navaden« disk 4,5ms
mrežni disk 10ms
Strežnik SIOL 20ms
Strežnik v Ameriki 200ms

In sedaj je čas, da vam predstavim glavno tabelo, ki me je tudi vodila v zapis tega prispevka. Povrnimo se torej na analogijo živih bitij, ki bi živela virtualno življenje v vašem računalniku. In privzamimo, da je en cikel v računalniku pač 1 sekunda njihovega življenja.

Dostop Računalnik Virtualno bitje
Register 0,3ns 1s
L1 predpom. 1,2ns 4s
L2 predpom. 3ns 10s
L3 predpom. 21ns 1min
RAM 120ns 7min
SSD disk 120.000ns 4,5dni
»navaden« disk 4,5ms 173dni
Mrežni disk 10ms 1 leto
Strežnik SIOL 20ms 2leti
Strežnik v Ameriki 200ms 20let

Naše virtualno bitjece mora torej kar 20let čakati, da dobi podatek iz strežnika v Ameriki 🙂

Kaj sem vam sploh želel prikazati s to analogijo? Ne vem sicer ali mi je uspelo, a želel sem vam prikazati, kako smo ljudje povsem nesposobni dojemati razmerje količin kadar so slednje nepredstavljivo majhne ali nepredstavljivo velike. S stališča računalnika je dostop do registra in dostop do strežnika v Ameriki sorazmerno kot 1 sekundna proti 20 letom!

Virtualna bitja torej živijo zelooo hitro. Mogoče še ena zelo zanimiva primerjava.

Moj delovni računalnik se prestarta v 15 sekundah. Če torej virtualno bitje, ki živi v mojem računalniku in katerega ena sekunda življenja predstavlja 1 cikel mojega računalnika (ki je mimogrede, samohvala!, še hitrejši od prej predstavljenega) uspavamo, ko se računalnik ugasne; koliko čase preteče, ko se računalnik spet zbudi?

Analogija je torej sledeča. Ko se računalnik ugasne se podatki o virtualnih bitjih shranijo na disk in ko se računalnik prižge, se podatki o virtualnih bitjih zopet preberejo ter bitja zopet oživijo. Kot, da bi nas uspavali in potem bi z vesoljsko ladjo potovali daleč vstran, nakar bi nas zopet prebudili. Kot rečeno, traja zagon mojega računalnika 15 sekund, kar je torej 15.000.000.000 ns oz. 45.000.000.000 sekund v življenju virtualnega bitja oz. 1400 let!

Za virtualna bitja mojega računalnika traja torej ponovni zagon računalnika 1400 let. Zanimivo!

Tags:

Leave a Reply

You must be logged in to post a comment.