Članki » Strokovni članki » Procesorske tehnologije (I.del)
Procesorske tehnologije (I.del)
Človek je že od nekdaj hotel posnemati naravo. Tako kot so se razni zgodnji sanjači o tem, kako bo človek nekoč poletel med oblake, zgledovali po pticah, tako so si inženirji, ki so hoteli izdelati prvi računalniški procesor, za zgled vzeli človeške možgane in njihovo delovanje poizkusili uporabiti pri procesorjih. Tukaj pa je nastopil manjši problem, saj ljudje še danes ne vemo, kako človeški možgani pravzaprav delujejo. Zaradi te nevšečnosti inženirji niso mogli samo kopirati narave, ampak so morali kar pošteno premisliti, kako se bodo lotili te kar zahtevne naloge. In kako jim je uspelo? Kot vidite, kar precej dobro, saj imamo danes kar pestro izbiro procesorjev, ki jih zaradi tega, ker brez njih ni računalnika, imenujemo kar možgani računalnika. Kljub temu, da bi lahko o sami pomembnosti procesorja razpravljali v nedogled, bomo raje to temo pustili za kakšne druge članke. Tokrat se bomo osredotočili predvsem na samo delovanje procesorja.
Kaj sploh je procesor in kako se je vse skupaj začelo?
Kot sem omenil že prej, bi lahko procesor poimenovali kar možgani računalnika, saj je računalnik brez procesorja kot človek brez možganov, torej kup neuporabnega železa silicija in tiskanega vezja. Ker so od procesorja odvisne vse komponente v računalniku, je ta tako pomemben skupek tranzistorjev temu primerno zapleten. Ravno zapletenost procesorja pa je vzrok, da je na svetu sorazmerno malo proizvajalcev teh silicijskih nujnikov. Če se osredotočimo samo na trg desktop računalnikov, kaj hitro opazimo, da imamo samo dva proizvajalca, ki zares obvladata svoj posel. To sta AMD in Intel, Vie pa v ta "hall of fame" zaenkrat še ne moremo šteti, saj je razvojno daleč zadaj. Vsi procesorji so opremljeni s številko, ki je izražena v megahrcih (krajše MHz). Ta nam pove hitrost, ne pa tudi samo zmogljivosti. Slednja je namreč odvisna od tega, kako so inženirji zasnovali sam procesor (o tem več kasneje). Prve ideje za centralno procesno enoto ali CPE (angleško CPU - central processing unit) najdemo že zelo zgodaj, ko so številni inženirji imeli v mislih CPE kot skupek mehaničnih delov. Izdelavo CPU-jev, kakršne poznamo danes, pa so omogočili tranzistorji, ki jih so jih izumili pri podjetju Bell labs. Veliko pa je k razvoju procesorjev, kakršne poznamo danes, prispevalo tudi podjetje Texas Instruments, ki leta 1958 tranzistorje prvič preneslo na silicijev kristal. Rodilo se je integrirano vezje, ki je bil prva prava odskočna deska za razvoj čipov, kakršne poznamo danes.
Arhitektura procesorja
Kot pove že ime, je procesor namenjen obdelavi informacij. Te informacije so lahko podatki ali ukazi (inštrukcije). Podatki so lahko na primer barva, črka, številka in so predstavljeni kot zaporedje ničel in enic. Sami podatki procesorju ne povedo ničesar o tem, kaj mora z njimi storiti. Potrebne informacije za obdelavo podatkov mu nudijo ukazi, ki procesorju povedo, kaj naj s podatki naredi.
Predpomnilnik
Procesor ukaze in podatek dobiva iz osrednjega pomnilnika, ki pa je za procesorjeve potrebe prepočasen. Ravno zaradi te hibe, so se inženirji domislili predpomnilnika. Le-ta je vgrajen v samo jedro, razdelimo pa ga na primarnega in na sekundarnega. Včasih, ko tehnologija izdelave še ni bila tako napredna, se je predpomnilnik delil na notranjega in na zunanjega. Notranji je bil vgrajen v jedro, zunanjega pa smo lahko našli na matični plošči ali na procesorskih karticah, ki so se pojavile s predstavitvijo Pentiumov II. Problem je nastopil, ko so inženirji ugotovili, da procesor potrebuje veliko več časa, da pride do zunanjega predpomnilnika, kot pa do notranjega. Za izboljšanje zmogljivosti je bila potrebna vgradnja obeh predpomnilnikov v jedro, to pa dolgo časa ni bilo mogoče, saj tehnologija enostavno ni dopuščala tega posega. Načrti so se uresničili šele s prihodom Celeronov s končnico A, ki so imeli oba predpomnilnika vgrajena, rezultati pa so bili temu primerni - čeprav so Celeroni imeli precej obubožano vodilo, ki je delovalo samo s frekvenco 66 MHz, so se lahko ravno zaradi tega na prvi pogled precej enostavnega posega enakovredno kosali z enako hitrimi Pentiumi 3. Presenečen je bil celo sam Intel, ki se iz vsega skupaj veliko naučil in pri Celeronih druge generacije ni več ponovil napake, ampak se je odločil, da bo le-te opremil s slabšim predpomnilnikom, kot dražje Coppermine. Ker mora biti predpomnilnik hiter, da lahko procesor čim prej pride do želenih podatkov, se inženirji niso odločili za DRAM (dynamic RAM), ampak za SRAM (static RAM). Slednji je od prvega mnogo hitrejši, poleg tega pa ne potrebuje "osveževalnega" vezja (le-to skrbi za osveževanje podatkov pri DRAM-u. Brez tega vezja bi bil sistemski SDRAM neuporaben, saj bi se podatki hitro "izgubili"). To pomeni, da se podatki, ko so enkrat zapisani v SRAM, tam tudi obdržijo, dokler jih ne prepišejo drugi. Da pa se to uresniči, mora biti SRAM še vedno pod električno napetostjo. Mogoče se bo kdo vprašal, zakaj tudi sistemski pomnilnik ni sestavljen iz SRAM čipov. Odgovor je preprost: SRAM je izjemno drag, poleg tega pa zasede tudi več prostora od DRAM-a. Ravno zaradi teh dveh razlogov, proizvajalci procesorjev ne smejo ravno pretiravati s količinami tega pomnilnika(upam, da sedaj veste, zakaj so Xeoni tako svinjsko dragi ;)).
Cevovod
Za cevovod bi lahko rekli, da je "bog i batina" obdelave podatkov in ukazov, saj so mu podrejene tako enota CPU, kot tudi FPU. Cevovod je razdeljen na več segmentov, katerih število se lahko v različnih procesorskih družinah razlikuje. Kot zanimivost lahko navedem, da imajo Pentiumi3 10 stopenjski, Athloni 11 stopenjski in Petniumi4 kar 20 stopenjski cevovod. Cevovod se v procesorju ni znašel kar tako, saj kar pošteno pripomore k sami zmogljivosti. Deluje namreč po principu tekočega traku, kar pomeni, da se lahko naenkrat obdeluje toliko ukazov, kolikor stopenj ima. V cevovodu z 10. stopnjami se tako lahko obdeluje kar 10 ukazov naenkrat.
Za lažjo predstavo delovanja si lahko predstavljate tovarno, ki, na primer, izdeluje avtomobile. Proizvodnja je razdeljena na več delov: v enem delu se izdeluje ogrodje avtomobila, v drugem delu se vanj vstavi motor, v tretjem delu notranja oprema, v četrtem delu pa avtomobil še prebarvajo. Slika pove več, kot tisoč besed ;).
Če pa tekoči trak za izdelavo avtomobilov pretvorimo v "tekoči trak" za obdelovanje ukazov, pa dobimo naslednjo sliko:
Za boljše razumevanje vzemimo, da imamo cevovod s štirimi segmenti. To so segmenti fetch, decode, execute in write back, ki si sledijo po vrsti. Najprej mora cevovod določen ukaz pripeljati v postopek obdelave in ravno to delo opravi segment fetch. Ker je osrednji pomnilnik počasen, posebno vezje naloži ukaze iz sistemskega pomnilnika v primarni predpomnilnik, od koder fetch naloži ukaz v cevovod. Fetchu sledi decode, kjer se ukazi x86, ki so pravzaprav ukazi CISC in so dokaj zapleteni, prevedejo v mikro ukaze RISC. Hitrost prevajanja ukazov v mikro ukaze RISC je odvisna od kompleksnosti ukazov x86. Če je ukaz preprost, se jih lahko prevede več na cikel, če pa je zapleten, pa lahko za prevajanje porabi celo več kot 1 cikel. Decodu sledi execute, kjer cevovod ugotovi, kje se bo ukaz izvedel: ukaz lahko pošlje v aritmetično logično enoto (ALU - arithmetic logic unit; včasih poimenovana tudi kot integer unit), ki je namenjena računanju s celimi števili, ali floating point unit (FPU), ki je zadolžena za računanje z realnimi števili (koreni, števila pi, ...). Executu sledi write back, ki prejme rezultate, ki so ga zračunale FPU in integer enote. Write back lahko rezultat shrani v registre ali pa v pomnilnik. Če obstaja kakšen ukaz, ki zahteva ta rezultat, ga save enota pošlje v registre, drugače pa v pomnilnik. Naj še enkrat poudarim, da se rezultat zaradi počasnosti sistemskega pomnilnika ne zapiše direktno, ampak se najprej shrani v tako imenovani write buffer. Šele od tu, se potem rezultat zapiše v pomnilnik oz. predpomnilnik. Več kot ima procesor write bufferjev, bolje je, saj lahko drži več rezultatov. Te štiri segmente vsebujejo vsi procesorji, vendar pa so lahko le-ti razdeljeni v več manjših segmentov (nekateri procesorji imajo dva fetcha, ...), lahko pa imajo še kakšne podporne funkcije.
Tako na precej preprosto povedan način deluje procesorski cevovod. Vendar pa ne pozabite, da je vse skupaj razloženo na precej enostaven način, saj imajo cevovodi, ki so vgrajeni v procesorja AthlonXP in Pentium4 še kopico drugih funkcij. Cevovod pa ni pomemben samo zaradi tega, ker lahko z njegovo pomočjo naenkrat obdelujemo več podatkov, ampak tudi zaradi tega, ker lahko z večjim številom segmentov vplivamo tudi na samo frekvenco procesorja. Če ne verjamete, si lahko ogledate Pentium4, ki je frekvenco 2 GHz dosegel ravno zaradi podaljšanega cevovoda. Frekvenco pa lahko dvignemo ravno zaradi manjši korakov, ki ukaze obdelujejo hitreje. Teoretično bi lahko procesorjev cevovod razdelili na poljubno število stopenj (recimo na 500), vendar pa smo tukaj vseeno malce omejeni. Če bi hoteli izdelati procesor s 500 stopnjam, bi iz proizvodnjih linij prišel ogromen procesor, ki bi bil drag, poleg tega pa bi gotovo trpela tudi njegova učinkovitost bi bila bolj vprašljiva kot ne. Zakaj? Problem je ravno v samih ukazih, ki se obdelujejo v cevovodu, saj slej ko prej naletimo na ukaze, ki vsebujejo nek pogoj (stavki if-then-else). V čem je problem? Procesor ne more izvedeti pogoja, dokler pogojni ukaz ne pride do executa. Dokler ta ukaz ne pride do executa, pa procesor ne ve, katere ukaze naj pošlje v cevovod. Rešitev za to nevšečnost se imenuje branch prediction, s pomočjo katere procesor predvidi, katere ukaze bo poslal v cevovod, še preden je znan pogoj. Kljub vsemu pa se včasih zgodi, da procesor napačno vse skupaj napačno predvidi. V tem primeru mora popolnoma sprazniti cevovod in ga napolniti z novimi ukazi. Praznjenje cevovoda se imenuje tudi flush in ima lahko kar precejšnje posledice na samo zmogljivost procesorja, saj pri večjemu številu stopenj traja kar precej časa, da se cevovod napolni z novimi ukazi (da o našem primeru, ko bi procesor imel kar 500 stopenj, sploh ne govorimo). Naloga inženirjev je, da naredijo tak procesor, ki bo znal kar najbolje napovedati potek računanja. Le-tega lahko izboljšajo tako, da vanj vgradijo boljši algoritem in večji medpomnilnik za razvejitve (branch target buffer). Večji kot je ta medpomnilnik, boljše je, saj lahko procesor vanj spravi več podatkov o pogojnih ukazih. Da bi proizvajalci povečali zmogljivost procesorja, v procesorje vgrajujejo tudi več cevovodov. Tako imajo nekateri procesorji lahko tudi po dva vzporedna cevovoda.
Med samo razlago o delovanju cevovoda sem navedel tudi nekaj izrazov, ki jih gotovo še ne poznate tako podrobno. Ker nisem hotel slogovno uničiti besedila, sam razlago teh nekaj delov procesorja prihranil za konec:
Aritmetično logična enota
Aritmetično logična enota je namenjena računanju s celimi števili. Starejši procesorji imajo samo eno tako enoto, novejši pa jih imajo več. Več aritmetično logičnih enot poveča zmogljivost, saj se lahko izvršuje več ukazov naenkrat. Procesorji, ki imajo več takih enot so superskalarni. Bolj napredni procesorji imajo aritmetično logične enote, ki so primerne samo za določene tipe ukazov.
Čeprav so ALU enote namenjene računanju s celimi števili, pa nekatere zmorejo računati tudi z realnimi števili, vendar precej počasi, zato to delo raje prevzame enota FPU.
Floating point unit - FPU
FPU je namenjen računanju z realnimi oz. tistimi števili, ki niso cela. Prve FPU enote zaradi premalo razvite tehnologije niso mogle biti vdelane v procesor, zato so zgodnji procesorji uporabljali tako imenovane matematične koprocesorje, ki pa so bili ločeni od centralno procesne enote (CPU). Prvič so se FPU enote začele vgrajevati v procesorje v času 486-tk z oznako DX. Gotovo ni treba poudarjati, da se je ta poseg kar pošteno poznal na hitrosti (v pozitivnem smislu, seveda ;)).
Registri
Registri so nekakšen zelo hiter pomnilnik v samemu procesorju (celo hitrejši od L1 in L2 predpomnilnika), ki vsebujejo vrednosti, ki jih procesor potrebuje pri računanju. Lahko bi rekli, da so najhitrejši pomnilnik v celotnem računalniku. Širina registrov (v bitih) nam pove, koliko biten je procesor. In kako vse skupaj deluje? Recimo, da hočemo zmnožiti dve števili. Če ju hočemo zmnožiti, mora procesor najprej naložiti ti dve števili v registre. Ko procesor zmnoži ti dve števili rezultat zapiše v predpomnilnik ali sistemski pomnilnik, lahko pa tudi v nek drugi register, če obstaja nek ukaz, ki zahteva rezultat tega množenja.
Več kot ima procesor registrov, bolje je, saj lahko shrani več podatkov, ki jih je potrebno obdelati in ima tako več "manevrirnega prostora". To je ena stran medalje (ta svetleča ;)). Tista malce bolj spraskana stran, na kateri je sijaj že zdavnaj izginil pa nam pove, da večje število registrov v procesorju tudi poveča zapletenost.
Control unit
Procesor je zapleten skupek tranzistorjev, ki je sestavljen iz kupa enot, ki so med seboj povezane in morajo nujno delovati kolikor toliko urejeno. Da vsa obdelava skupaj ne izgleda kot kakšna hudo demoralizirana in nedisciplinirana vojska, poskrbi control unit ali kontrolna enota. To je posebno vezje, ki nadzoruje tok podatkov skozi procesor in glede na tok podatkov prilagaja delovanje enot v procesorju (npr. aritmetično logični enota da vedeti, kdaj naj začne z izvajanjem ukazov, fetch enoti, kdaj naj zgrabi nov ukaz, odkodirni enoti, kdaj naj začne prevajati ukaz v mikro ukaze, ...). Ker nadzoruje vse, ji včasih ljubkovalno rečemo "možgani v možganih".
Zaključek
Tako, pa smo se prebili do samega konca članka. Čeprav je članek videti precej strokoven, ne smete pozabiti, da ste s tem, ko ste ga prebrali le bežno okusili delovanje procesorja. Ne smete pozabiti, da je procesor ena izmed najbolj zafrknjenih stvari v računalniku in je zato tudi precej težko razumeti samo delovanje. Zato ni čudno, da nekateri ta tako pomemben delček računalnika pogosto imenujejo kar osmo čudo sveta. Upam, da sem vam s tem člankom predvsem pomagal razumeti nekatere ne preveč jasne pojme, ki jih boste gotovo srečevali v prihodnjih opisih procesorjev, tako na Slo-techu, kot tudi na drugih straneh, ki se ukvarjajo z računalniško tematiko. Če pa vas vse skupaj zanima in bi radi izvedeli kaj več kot samo nekaj osnov, pa si kupite kakšno knjigo, saj boste nad internetom (to lahko povem po 1 mesecu iskanja virov) prej ko slej obupali. No, morda pa se tudi motim (seveda se motiš :D... kmalu pride malo bolj strokoven članek o tehnologijah uporabljenih v P4:)) --Primoz)
Čudežno popotovanje skozi grafični cevovod
- Marko Dolenc ::
Trenutno očitno živimo v obdobju, ko razni *PU-ji (Processing Unit) rastejo kot gobe po dežju. Nedolgo tega je tržne police ugledal prvi pospeševalnik fizikalnih izračunov (PPU ali Physic Processing Unit) PhysX podjetja Ageia. In ker to očitno še vedno ni dovolj, ...
Nova bitka v vojni grafičnih kartic
- Marko Dolenc ::
Da je računalništvo hitro se razvijajoča panoga čivkajo že vrabčki na vejah. Da se grafične kartice razvijajo še hitreje od ostalih področij znotraj računalništva, je takisto lahko jasno vsakemu, ki vsaj vsake toliko preleti kakšen cenik ...
nVidia GeForce4 Ti4400
Ko mi je bil ta skupek silicija, odet v težko srajco aluminija, predan v roke, sem si mislil: "Uau, kartica in pol". S svojo zastrašljivo predstavo že ob prvem pogledu vliva strahospoštovanje, saj je razvidno, da mora kartica v sebi skrivati huronsko moč. Ampak o ...
Procesorske tehnologije (II. del)
- Malecky ::
Slycer je pojasnil delovanje vsakega procesorja na osnovi Pentium 4, jaz se bom pa poglobil v stvari, ki so jih Intelovci razvijali pet let in ki naj bi bile revolucionarne, tudi par let pred vsakim konkurenčnim izdelkom. V tem poglavju se bomo osredotočili na razlike med Intel Pentium 4 in ...
Kaloričen zajtrk: milijarde trikotnikov in sodobni GPU-ji
- Marko Dolenc ::
Spletni forumi so dandanes polni razglabljanj na temo poÄasnega napredovanja grafike v PC igrah. VeÄina komentatorjev se obiÄajno obdregne ob konzole, katerih zmogljivosti so fiksirane Ĺže vse od njihovega izida in poslediÄno viĹĄjih stroĹĄkov razvoja iger, v primeru dodatnih grafiÄnih izboljĹĄav ...