Protsessorituum

**Protsessorituum** (inglise keeles *processor core*) on arvuti protsessori arvutusüksus. Protsessorituuma eesmärk on vastavalt ette antavatele käskudele teostada arvutusoperatsioone.

## Protsessorituuma olemus
Protsessorituuma puhul on tegemist arvutusüksusega, mis asub arvuti kesktöötlusseadmes ehk protsessoris (inglise keeles *Central_Processing Unit*, CPU). Protsessorituum täidab juhistena ette antud käske, milleks on arvutusülesanded. Töödeldav informatsioon loetakse töötlemiseks arvuti muutmällu (*Random Access Memory*, RAM).

## Tööpõhimõte
Protsessorituumas teostatakse aritmeetika-loogikaploki (*Arithmetic and Logic Unit*, ALU) abil aritmeetika- ja loogikatehteid kahendsüsteemis. Selleks, et aritmeetika-loogikaplokk suudaks teostada tehteid, peab kõigepealt info jõudma sisend- ja juhisregistritest aritmeetika-loogikaplokki. Aritmeetikatehteid tehakse kahendkoodis arvudega, mida saab liita ja nihutada. Tehete tulemused salvestatakse protsessori registri(te)sse ja sealt edasi läbi vahemälu arvuti muutmällu.

Aritmeetika-loogikaplokk sooritab järgmisi loogikatehteid:
* VÕI (OR), 
* NING/JA (AND), 
* välistav või (XOR), 
* Inverteeritud välistav või (XNOR), 
* EI (NOT), 
* EI-EGA ehk VÕI-EI (NOR), 
* NING-EI (NAND) 

Nende tehete sooritamiseks on aritmeetika-loogikaplokis vastavad loogikalülitused. Aritmeetika-loogikaploki operatsioonide loetelu sõltub protsessorituuma funktsioonist arvuti protsessoris.
 

Aritmeetika-loogikaploki (ALU) tehted on üldjuhul mikrooperatsioonide kogumid. Aritmeetika-loogikaploki ülesanne on pakkuda sellist mikrooperatsioonide kogumit, mis võimaldaks koostada vastava mikroprogrammi igale vajalikule operatsioonile ehk tehtele. ALU aritmeetika- ja loogikatehete algoritmid valitakse minimaalse mikrooperatsioonide hulga tingimuse põhimõttel. ALU vajaliku töökiiruse tagamiseks ei tohi mikrooperatsioonide hulk olla liiga piiratud. Liiga piiratud mikrooperatsioonide hulga korral võivad mõned tehted tekitada väga pikki mikroprogramme, mis omakorda suurendavad mõningate operatsioonide täitmise aega.  

ALU loogilise struktuuri keerukust iseloomustab teatud määral üksteisest erinevate mikrooperatsioonide hulk, mis on vajalik ülesannete kogumi täitmiseks. Iga protsessi alguses on loogikalülitused, mis loovad seosed erinevate juhiste vahel ja võimaldavad rakendada etteantud mikrokäske. Mikrokäskude täitmise järjekord määratakse operatsiooni täitmise algoritmiga. ALU poolt täidetavad funktsioonid võivad olla omavahel seotud. Peamiselt on operatsiooni täitmise järjekord kõigepealt aritmeetiline ja peale seda loogiline või eriaritmeetiline.

### Võta-dekodeeri-teosta (inglise keeles ''fetch–decode–execute'') operatsioonid

#### Võta (inglise keeles ''Fetch'')
Fetch’i puhul on tegemist operatsiooni tsükli esimese sammuga, mille eesmärk on kätte saada käsklused. Käsklused on esitatud kahendkoodi numbrite kombinatsioonidena, mis paiknevad mälus (vahe- või operatiivmälus). Käskluse aadress mälus on määratud käskluse viida (inglise keeles *pointer*) järgi. Viit määrab ära, milline järgmine käsklus tuleb mälust kätte saada. Kui käsklus on kätte saadud, siis kontrollitakse selle pikkust ja lisaks kontrollitakse, et käskluses oleks kaasas ka järgmise käskluse aadress. Käskluste kätte saamisega võivad ka tekkida probleemid, näiteks kui proovitakse käskluseid saada aeglasest mälust. See võib tekitada käskluste ootetsüklite seisakut. Seisaku vältimiseks kasutatakse toru põhimõtet ehk, kui käsklus on ära kontrollitud ja liigub edasi, siis võetakse kontrollimiseks juba uus käsklus. Tänu sellele saab tsükkel toimida ilma seisakuteta. Toru abil proovitakse selle probleem lahendada võimalikult efektiivselt, tekitatakse olukord, mille käigus oleksid võimalikud väiksed ressursi kaod.  

#### Dekodeerimine (inglise keeles ''Decode'')

Käsklused, mida protsessor mälu aadressidelt saab määravad ära, mis ülesannet peab protsessori tuum täitma hakkama. Dekodeerimise plokis muundatakse mälu aadressilt tulevad käsklused signaaliks, mida suudavad ära kasutada protsessori tuumad, et sooritada ette antud ülesanne. 

Dekodeerimise plokis lähtutakse käskluste dekodeerimisel sellest, millist käsustikku (inglise keeles *instruction set architecture*, ISA) konkreetne protsessor kasutab. Üldjuhul kujutatakse ette dekodeeritud juhiseid sellisena, et esimene osa bittidest määrab ära, millist ülesannet tuleb hakata protsessori tuumadel täima. Ülejäänud osa käsklusest annab juurde vastavad algandmed ja parameetrid, millest lähtudes tuleb ülesannet täita. Käsklustes olevateks parameetriteks võivad olla näiteks konstantsed väärtused või mingi kindla andme asukoha aadress mälus, mida tuleb selle ülesande täitmiseks kasutada. 

Sõltuvalt protsessori arhitektuurist võib käskluste dekodeerimisplokk olla loodud muutmatu plokina (näiteks arvutusprotsessorid) või kui mikroprogrammina (näiteks graafikaprotsessorid). Mikroprogrammi kujul dekodeerimisplokis muudetakse käsud vastavateks signaalideks, mida saab rakendada mitme taktsageduse tsükli jooksul. On olemas võimalus, kus saab ka mälus paiknevat mikroprogrammi muuta. Selle eesmärk on tõsta efektiivsust, kui protsessori tuumadel on vaia täita ainult mingit kindlat ülesannet, mille puhul tuleb käskluseid dekodeerida erilisel viisil. 

#### Teostus (inglise keeles ''Execute'')
Kui on sooritatud käskluste kättesaamine ja dekodeerimine, siis tuleb need käsklused ka teostada. Sõltuvalt protsessori arhitektuurist võib käskluste täitmine toimuda, kas ühe tsükliga või mitme tsükli tulemusena. Käsklusi täites on protsessori erinevad osad aktiivsed või mitteaktiivsed. Protsessori osade aktiivsuse määravad käskluste täitmise ajal tekivad elektrilised signaalid. Käsklus täitetakse üldjuhul ühe takti jooksul. Peale käsu täitmist kirjutatakse tulemus registrisse, et kui neid on vaja kasutada järgmise käsu täitmisel, siis on neile võimalik kiiresti ligi saada. Lisaks kirjutatakse tulemused ka mällu, mis on aeglasem. 

Näiteks kui on vaja sooritada liitmistehe siis tuleb registrist võtta eelmise käsu tulemus, mis tuleb liita aritmeetika-loogikaplokki abil uue käsu tulemusele. Kõik see protsess leiab aset ühe signaali perioodi jooksu, ehk perioodi alguses sisenevad andmed aritmeetika-loogikaplokki ja perioodi lõpuks on aritmeetika-loogikaplokkist väljunud tulemus. Tulemuseks saadud väärtus salvestatakse mällu. Kui peaks juhtuma, et aritmeetika-loogikaplokis teostatava tehte väärtus on liiga suur, siis antakse sellest märku nii öelda lipu tõstmisega. Saadud liiga suur väärtus mõjutab järgmist aritmeetilist rehkendust.

### Register
Protsessori registri puhul on tegemist kiiresti ligi pääsetava asukohaga, kuhu saab ajutiselt salvestada andmeid. Registrid võivad olla näiteks, kas ainult andmete registrisse kirjutamiseks või siis ainult registrist väärtuste lugemiseks (registris hoitakse väärtusi 0, 1, ja pi). Arvuti arhitektuurilises vaates on register tüüpiliselt mälust eraldiseisevalt adresseeritav üksus aga mõningatel juhtudel võib esineda ka registreid, mis asuvad mäluaadressidel. 

Kõikides arvutusseadmetes saadakse andmed mälust, mis liiguvad omakorda edasi registrisse. Registris olevate andmetega teostatakse aritmeetika rehkendusi, mis peavad lõpuks vastama ette antud käsklustele. Rehkenduste tulemused salvestatakse uuesti mällu kas siis samale aadressile nagu algselt või hoopis siis uuele aadressile. Protsessorid kasutavad mäluna kas staatilist (vahemälu) või dünaamilist muutmälu ehk RAM (inglise keeles *Random Access Memory*), mille poole saab pöörduda erinevatel tasanditel (näiteks 1. 2. ja 3. taseme vahemälu ning muutmälu). 

Protsessori registrid on üldjuhul mälu hierarhias kõige kõrgemal positsioonil, seega on võimalik registritele kõige kiiremini ligi saada. Moodsates protsessorite arhitektuurides on mitmeid üldkasutatavaid registreid. Tänu sellele on võimalik registreid nö. ümber nimetada ja selle funktsionaalsusega paraneb efektiivsus ning saavad võimalikuks paralleelseid ülesandeid. Tänapäeva x86 arhitektuur võttis seda tüüpi tehnoloogia kasutusele 1995.aastal, kui tulid välja näiteks sellised protsessorid Pentium Pro, Cyrix 6x86, Nx586, ja AMD K5. 

### Ujukomaarvu-plokk (FPU)
Ujukomaarvu-ploki (inglise keelse *floating-point unit*, FPU) puhul on tegemist kindla ülesandega plokiga, milleks on täita ujukoma arvutusi. Plokis teostatakse liitmist, lahutamist, korrutamist, jagamist ja ruutjuure operatsioone. Osad Ujukomaarvu-plokid suudavad teostada ka eksponentsaal ja trigonomeetrilisi arvutusi. Ujukomaarvu-plokk on üldjuhul integreeritud arvuti protsessorisse, kus saab protsessori tuum selle lisafunktsionaalsust ära kasutada. 

### Juhtseade
Juhtseade (inglise keeles *Control unit*) on arvuti protsessori osa, mis juhib protsessori tööd, teisisõnu jagab tuumale ülesandeid. Juhtseade kasutab binaarset dekoodrit, selleks et teisendada käskluseid, mis juhivad ALU, täiturite ja registrite tööd. Juhtseade juhib andmevoogu protsessori ja teiste arvutusseadmete vahel.

## Mitmetuumaline protsessor

Mitmetuumaline protsessor on kahe või enama tuumaga protsessor. Mitme tuuma toel on võimalik teostada paralleelarvutusi ja multitegumtööd (inglise keeles *multitasking*) ehk tehakse mitut toimingut sama aegselt. Mitme tuumaga protsessor saab jagada erinevad ülesanded mitme protsessorituuma vahel. Tänu ülesannete jagamisele kasvab protsessori efektiivsus ja sooritatakse käsud kiiremini.

## Lõim

Lõim (inglise keeles *Thread*) tehnoloogia, mis jagab füüsilise protsessori tuuma mitmeks virtuaalseks tuumaks. Ühel protsessori tuumal saab olla mitu lõime, kuid enamasti on tänastel protsessoritel ühe tuuma kohta 2 lõime. Näiteks kui protsessoril on kaks tuuma, siis on protsessoril neli lõime ja kui protsessoril on 8 tuuma siis on sellel 16 lõime. 

### Protsessori lõim
Protsessori lõimed tekitatakse tänu riistvaralisele tehnoloogiale, mille abil jagatakse protsessorituum mitmeks lõimeks. Inteli hüperhargtöötluse (inglise keeles *Hyper-Threading*) puhul jagatakse üks füüsiline protsessorituum kaheks virtuaalseks tuumaks. See tähendab seda, et on kaks tuuma, millel on ühine täiturmootor. Mõlemad virtuaalsed tuumad suudavad tegeleda üksteisest erinevate tarkvaraliste lõimede käsklustega. Lõimesid on võimalik luua nii palju, kui arvutis kasutusel olev protsessor neid luua laseb.

### Tarkvaraline lõim
Tarkvaralinelõim luuakse operatsiooni süsteemi poolt alati, kui mingi rakendus avatakse. Avatud lõim võib luua omakorda alam lõimed, mis tegelevad kindlate ülesannetega. Põhimõtteliselt, mida rohkem avatakse arvutis rakendusi, seda rohkem tarkvaralisi lõimesid ka luuakse.

### Miks kasutatakse lõimesid?
Protsessori tuumade ja lõimede arvutusvõimsuse maksimaalseks ära kasutamiseks jagatakse tarkvaraprotsessid mitmeks lõimeks. Mitu tuuma ja lõime võimaldavad protsessoril teostada mitut ülesannet samaaegselt, mis muudab ülesannete täitmise kiiremaks ja efektiivsemaks. Mitu tuuma ja lõime võimaldab arvutil käitada mitut rakendust samaaegselt ja neid saab kasutada paralleelselt (inglise keeles *multitasking*).

## Taktsagedus
Taktsagedus määrab, kui kiiresti on protsessor suuteline käsklusi vastu võtma ja arvutusi tegema, ehk näitab kui kiiresti on suuteline protsessoris paiknev tuum teostama ette antud käskluste põhjal aritmeetikatehteid. Taktsagedust mõõdetakse hertsides (Hz), mida suurem number, seda suurem on protsessori taktsagedus. Taktsageduse genereerib taktgeneraator, taktsagedusel on kindel periood. Arvutustehnikas on enamasti taktsageduse allikana kasutusel kvartsostsillaator. Taktsagedust kujutletakse ristküliksignaalina, ühe perioodi vältel võib näiteks arvuti protsessor täita ühe või mitu käsku. 

### Taktsagedus või tuumade arv
Kui on arvuti, millel on üks protsessori tuum ja kõrge taktsagedus, siis on arvuti suuteline toimetama ühe ülesandega kiiresi. Kuid mitme protsessorituumaga ja madalama taktsagedusega arvuti on suuteline töötama mitmete ülesannetega samaaegselt. See pärast tulebki arvutite kiiruseid võrreldes jälgida, milliste ülesannete jaoks on spetsiifiline arvuti ehitatud. 

## Graafikaprotsessori tuum
Graafikaprotsessori tuumade ja arvutusprotsessori tuumade vahel on nii sarnasusi kui ka erinevusi. Arvutusprotsessori tuumad on loodud võimega jooksutada väga erinevaid erinevaid ülesandeid. Graafikaprotsessorite tuumad on aga loodud väga kindla eesmärgiga ülesannete täitmiseks, mis muudab need tuumad efektiivsemaks (kiiremaks) neid kindlaid ülesandeid täites. Kuna graafikaprotsessori tuumad on monofunktsionaalsemad, siis on need elektrooniliselt lihtsamad ja neid on samale pinnaühikule paigutada rohkem kui arvutusprotsessori tuumasid. 

### NVIDIA CUDA tuumad
CUDA (inglise keeles *Compute Unified Device Architecture*) puhul on tegemist NVIDIA tehnoloogiaga. Nende tuumade peamiseks ülesandeks on luua efektiivne paralleelne aritmeetikatehete teostamine. CUDA tuumadel on kindlad ülesanded, mis lubab ühel tuumal efektiivsemalt teostada loogikaülesandeid. Kui arvutusprotsessorites on kümneid tuumasid (täna ka juba sadu), siis graafikaprotsessorites on CUDA tuumasid tuhandeid.

### NVIDIA Tensori tuumad
Tensor tuumad on loodud selleks, et muuta tehisintellekt ja masinõppe võimsamaks ja laiaulatuslikumaks. Tensor tuumad on disainitud selleks, et teostada maatriks arvutusi, mille puhul on tegemist masinõppe selgrooga. NVIDIA 3 põlvkonna tensor tuumad on 20x jõudsamad kui eelmise põlvkonna omad. Seda Tensor tuumade kiirust kasutatakse efektiivselt ära NVIDIA DLSS tehnoloogias, kus analüüsitakse masinõppe abil pilti, et selle kvaliteeti tõsta. 

### NVIDIA RT tuumad
RT tuumad on disainitud selleks, et reaalajas teostada masinõpet video ja audio väljundite peal. Selle masinõppe eesmärgiks on kiirendada kiirtejälituse (inglise keeles *ray tracing*) ja teekonnajälituse (inglise keeles *path tracing*) arvutusi. Kiirtejälitusarvutuste eesmärk on 3D-graafikas simuleerida valguse liikumist peegelduste abil. 

## Vaata ka
* Keskseade
* Protsessor 
* Aritmeetika-loogikaplokk
* Taktsagedus
* Graafikaprotsessor 
* Nvidia
* Paralleelarvutus 
* Multitegumtöö
* Hüperhargtöötlus

## Viited

## Muud allikad

13.

14.

15.

16.

17.

18.

19.