Protsessori vahemälu: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
püüdsin alustada toimetamist
Parandasin sõnastust ja eemaldasin paar faktiviga
3. rida:
[[Pilt:cache,basic.png|right|CPU mälu vahemälu diagramm]]
 
'''Protsessori vahemälu''' ([[inglise keel]]es ''CPU cache'') on [[vahemälu]], mida kasutab [[arvuti]] [[keskprotsessor]], et vähendada [[mälu (arvuti)|mälu]]le juurdepääsupöörduse keskmist aega.
 
Vahemälu on väike ja kiire mälu, mis talletab [[peamälupõhimälu]] kõige sagedamini kasutatavate [[mälupesa|pesa]]de koopiad. Kui kasutatakse peamiselt vahemälu, siis mälu keskmine [[latentsusaegpöördusaeg]] on lähemal vahemälu latentsusajalepöördusajale kui peamälupõhimälu omale.
 
Diagramm paremal näitab kahte mälu. Iga asukoht mõlemas mälus hoiab mingeid andmeid, olenevalt mälu ehitusest võib asukoha andmete hulk olla 8 kuni 128 baiti. Iga asukoht omab ka indeks numbrit andmete eristuseks. Indeksit mis tähistab mõnda [[peamälupõhimälu]] asukohta nimetatakse aadressiks. Iga asukoht vahemälus omab peale enda aadressi ka peamälustpõhimälust kopeeritud andmete aadressi.
 
Kui [[mikroprotsessor|protsessor]] soovib lugeda või kirjutada mõnda [[peamälupõhimälu]] asukohtapesa, kontrollitakse enne kas peamäluvastav aadressmäluaadress pole juba vahemälusse kopeeritud. Kui mõni neist aadressitest klapib, loeb või kirjutab protsessor vastavad andmed hoopis vahemälusse. AegAega mis selle tegevuse jaoks kulub on tuntud kuinimetatakse vahemälu ''latentsusaegpöördusaeg''.
 
Kui vahemälus puudub otsitav aadress, siis suurem osa vahemäludest teevad uue sissekande puudunud aadressist. Andmete mitte-leidmist vahemälust nimetatakse vahemälu ''möödalasuks''. Aadressile kopeeritakse juurde ka andmed peamälustpõhimälust, mis on aeglane tegevus ja samuti ka põhjus miks vahemälu üldse kasutatakse.
 
==Mõned detailid==
17. rida:
Selleks, et teha ruumi uutele sissekannetele vahemälus, tuleb tihti vahemälust mõni eelnevalt sisestatud sissekanne välja tõsta. Reeglistik mida selleks kasutatakse on tuntud kui ''asenduspoliitika''. Peamine probleem asendusega on see, et tuleb ennustada milline olemasolevatest vahemälu sissekannetest omab kõige vähem võimalust hiljem uuesti kasutusse minna. Tuleviku ennustamine on raske, eriti veel riistvaralisel vahemälul mis kasutavad lihtsaid reegleid mis on programmeeritud mikroskeemidesse. On mitmeid asenduspoliitikaid mille vahel valida aga mitte ühtegi täiuslikku. Üks populaarsemaid on [[LRU]], mille puhul asendatakse kõige kauem kasutamata seisnud sissekanne.
 
Kui andmed kirjutatakse vahemällu tuleb need mingil ajahetkel kirjutada ka peamällupõhimällu. Selle kirjutamise ajastust kontrollib ''kirjutamispoliitika''. TeatudLäbivkirjutamisega vahemälude korral kirjutatakse igal vahemällusse kirjutamise korralkirjutamisel ka peamälussepõhimällu. TeiseTagasi moodusekirjutamisega vahemälude puhul jäävad andmed vahemällu nii kauaks kuni vahemälu sissekanne välja tõugatakse.
 
Andmeid peamäluspõhimälus, mis on kopeeritud ka vahemällu, võivad muuta ka teised allikad. Sellisel puhul võib vahemälus olev koopia aeguda. Nagu eelnevalt võis ka aru saada, võivad ka vahemälu andmed uuemad olla kui peamälupõhimälu omad, mille puhul peamälupõhimälu andmed muutuvad aegunuks. Kommunikatsiooniprotokollid vahemälu korraldajad mis hoiavad andmed kooskõlalised on tuntud kui ''seose protokoll''.
 
Moodsad CPU'd[[mikroprotssesor]]id võivad korraga sooritada mitusada erinevat ülesannetkäsku aja jooksul, mis kulub andmete kätte saamiseks mälust. Sellepärast rakendatakse erinevaid tehnikaid, et hoida CPU'dprotsessorit sellelmälupöörduse ajal tegevusestöös. [[Pentium Pro]] ja hilisemad [[Intel]]'i arhitektuuriga protsessorid üritavad sooritada iseseisvaid ülesandeid, peale instruktsiooni misvahemälu kopeeribmöödalasu vahemälustpuhul aadressitäita mittevajatavatest leidmiselandmetest peamälustsõltumatuid andmeidülesandeid. [[Pentium 4]] kasutab tehnoloogiat nimega [[Simultaneous multithreading]], ([[HyperThreading]] [[Intel]]'i terminoloogia järgi) mis laseb teisel programmil või [[lõim]]el protsessorit kasutada, samal ajal kui esimene programm ootab andmeid peamälustpõhimälust.
 
 
==AssotseerumineAssotsiatiivsus==
[[Pilt:270px-Cache,associative-fill-both.png|thumbnail|270px|Millised mälu asukohad saab kopeerida milline vahemälu asukoht]]
 
Eespool sai öeldud, et asenduspoliitika otsustab kuhu vahemälusse koopia salvestatakse. Kui asenduspoliitika võib vabalt valida sissekande, siis kutsutakse vahemälu ''täielikult assotseeruvtäisassotsiatiivseks''. Teine äärmus on kui peamälupõhimälu iga sissekannepesa saab minnaasuda vaid ühteühes kohtakohas vahemälus, seda nimetatakse otseseksotse ammutuseksvastendatud vahemäluks(diagrammil direct mapped). Paljud vahemälud teostavad nn. kompromissi ning neid kirjeldatakse kuinimetatakse ''seatudmoodul assotseeruvaksassotsiatiivseteks''. Näiteks level-1esimese andmetetaseme vahemäluandmevahemälu AMD Athlonis on kahtepidikahes assotseeruvsuunas assotsiatiivne, mis tähendab, et peamälupõhimälu sissekannetblokki võib kopeerida kahte vahemälu asukohta, level-1 andmete vahemälus.
 
AssotseerumineLiigne assotsiatiivsus on halb. Kui on 1016 kohta kuhu asenduspoliitika võib panna uue sissekande vahemälus, siis kui vahemälust otsitaksesissekande sissekannetotsimisel kõiktuleb 10kontrollida kohtaläbi tulebkõik läbi16 kontrollidakohta. Suurema hulga kohtade kontrollimine nõuab rohkem võimsusttransistore ning aega. Samas vahemälud suure assotseerumisegaassotsiatiivsuse kannatavadastmega vähem vahemälu sissekanneteomavad puudumisteparemat all[[tabamustegur]]it, kuid omavad suuremat reaktsioonikiirustpöördusaega janing voolutarbimist. Assotseerumise kohta on järgmine reegel: assotseerumise kahekordistamine mõjub vahemälust sissekannete leidmisele samamoodi nagu vahemälu suuruse kahekordistamine, ühesuunalisest,(otseselt ammutatavast) neljasuunaliseks.
 
Üks eeliseid otse ammutavalotsevastendusega vahemälul on lihtsad ja kiired sissekande asukohtaasukoha avastusedleidmised. Kui aadressvirtuaalaadress on välja arvutatud, saab vahemälust juba andmeid lugeda ning protsessor võib jätkata tööd andmetega, enne kui kontrollitakse kas vahemälusse kopeeritud peamälupõhimälu aadress üldse vastab otsitud aadressile.
 
==Aadressi tõlkimine==
 
Ajalooliselt esimene riistvaraline vahemälu, mida kasutati arvutis ei salvestanudpuhverdanud peamälupõhimälu andmeid, vaid hoopis tõgitudvirtuaalaadresse ning virtuaalaadresseidnendele javastendatud füüsilisi aadresseidaadresse. See vahemälu on tuntud kui 'Translation Lookaside Buffer' (TLB).
 
==Vahemälu hierarhia moodsates protsessorites==
 
Moodsatele protsessorite kiipideleprotsessorkiipidele on ehitatud mitmeid koostöötavaid vahemälusid. Moodsa vahemälu hierarhia arendamisel esinevad kaks probleemi.
 
==Spetsialiseerunud=Spetsialiseeritud vahemälud===
 
EsimeneKäsukonveieritega probleem on see, et omavahel konveiersüsteemiga ühendatud CPU'dprotsessori kasutavad mälu mitmes punktis: instruktsioonide hankiminekäsuvõtt, virtuaalse aadressivirtuaalaadressi tõlkimine füüsiliseks, operandivõtt (andmete hankimine). Loomulik disain on kasutada erinevaid vahemälusid iga erineva punkti jaoks, et ükski ressurssvahemälu ei peaks läbimateenindama kahte punktiastet konveiersüsteemilkonveieris. Selletõttu on protsessoril vähemalt kolm eraldi rolliga vahemälu,: kõigilandmevahemälu, neistkäsuvahemälu omaja rollTLB.
 
==== Ohver vahemäluOhvervahemälu ====
 
Vahemälu misOhvervahemälu on väiketavaliselt japisikene täielikult(kuni assotseeruvpaar midakilobaiti) kasutataksetäisassotsiatiivne andme hulgade hoidmiseksvahemälu, mis onhoiab [[protsessori vahemälu]]'st välja tõugatud konfliktiandmeid. võiOhvervahemälu suuruseon tõttu.madalaima Ohvertaseme vahemälu on pea-vahemälu ning tema taastäitmise teepõhimälu vahel, hoiab ainult andmeid, mis on välja tõugatud vahemälust. Ohvervahemälu võib oluliselt vähendada liiga väikesest assotsiatiivsuse astmest tingitud möödalaskude arvu.
 
==== 'Jälg' vahemäluJäljevahemälu ====
Üks ekstreemsemaid näiteid vahemälu spetsialiseerumisest on ''jälg vahemälujäljevahemälu'', mis on ehitatud Intel [[Pentium 4]] mikroprotsessoritesse. Seda mehhanismi kasutatakse, et hankimisekäsuvõtu kiirust suurendada. Selleks salvestatakse tükikesieelnevalt juba hangitud ning dekodeeritud [[instruktsioonkäsk|käsu]]'idest mis on juba hangitudjärjendeid. Selle mehhanismi pakkusid esimesena välja [[Eric Rotenberg]], [[Steven Bennett]] ja [[Jim Smith (teadlane)]] oma [[1996]] avaldatud dokumendis ''"Trace Cache: a Low Latency Approach to High Bandwidth Instruction Fetching."''
 
Jäljevahemälu salvestab käsud peale nende dekodeerimist.
'Jälg' vahemälu salvestab instruktsioonid peale seda kui need on dekodeeritud või kui need on unustatud.
 
Lisa lugemist: [http://sise.ttu.ee/aa/modules.php?name=News&file=article&sid=201 A. Toomsalu artikkel ajakirjas A & A] [http://citeseer.nj.nec.com/rotenberg96trace.html Smithi, Rotenbergi ja Bennett'i avaldatud dokument].
 
==== Harvardi arhitektuur ====
KonveiersüsteemMikroprotsessor eraldi instruktsioonidegakäsu- ja andmevahemäludega omab väidetavaltnimetatakse Harvardi arhitektuuriarhitektuuriga protsessoriks. Algupäraselt kasutati seda fraasi vihjamaksarvutite masinatelekohta millel on eraldi instruktsioonidandmemälu ja andmemälukäsumälu eraldi, niisiis ei olnud võimalust,mis etvälistas programmprogrammi võispoolt mõjutadakäskude instruktsioonemuutmise.
 
===Mitmetasemelised vahemälud===
 
Üks suuremsuurematest probleemprobleemidest on kompromiss vahemälu reaktsioonikiirusepöördusaja ja sissekannete leidmisetabamusteguri vahel. SuurematelSuured vahemälud on aeglased jakuid omavad suurt sissekannetetõenäosust, et korduvalt kasutatavid andmeid ei tõrjuta leidmisevahemälust võimalikustvälja. Et sellest mööda pääseda kasutavad paljud arvutidmikroprotsessorsüsteemid mitmetasemelist vahemäluvahemälude süsteemi. VäikesedKasututatakse kiiredVäikeseid vahemäludja kiireid vahemälusid koos suurte, ning aeglaste vahemäludega. Kuna latentsuskiirus peamäluprotsessori ja kiireimapõhimälu vahemälukiiruste vahelvahe onjärjest muutunud suuremakskasvab, kasutatakse juba ka kolmeastmelisi vahemälusid. Näiteks 2003.a. hakkaslisas Intel Itanium II 6MB ühendatudprotsessorile kolmetasemelisiintegreeritud vahemälusidkolmanda omataseme kiipidelühitatud vahemälu. IBM Power 4 seeriad protsessorid omavad 256MBprotsessorimoodulile kolmetasemelisipaigutatud 32MB kolmanda taseme vahemälusid, mida kasutabjagavad korragakõik mitusamale moodulile paigutatud 4 protsessorit.
 
Mitmetasemelised vahemälud opereerivad tavaliselt kontrollides väiksematväikseimat, '''1. taseme''' vahemälu esimesena. Kui leitakse õige sissekanne jätkab protsessor täiskiirusel. Kui sissekannet ei leita, kontrollitakse järgmist taset, kui sissekannet vahemälust ei leita, otsitakse sissekanne peamälustpõhimälust.
 
Mitmetasemelised vahemälud toovad hulga uusi disaini nüansse. Näiteks mõned protsessorid,(Intel Pentium 2, 3 ja 4. Samuti ka enamik RISC protsessoreid) salvestavad 1 taseme vahemälu ka 2 taseme vahemälusse (kutsutakse lisavatekssisaldavateks? vahemäludeks). Teised protsessorid (näiteks AMD Athlon) salvestavad andmed ainult ühele tasemele (kutsutakse välja arvavateksvälistavateks vahemäludeks).
 
Viimati nimetatud vahemälude eelis on see, et nad suudavad hoida endas rohkem andmeid. See eelis on suurem kui on tegemist suurte vahemäludega. Kui 1. tasemelt sissekannet ei leita ja 2. tasemelt leitakse siis vahetatakse 2. tasemelt rida mõne 1. taseme omaga. Vahetamine nõuab rohkem tööd kui üle kopeerimine mida lisavsisaldav vahemälu teeb.
 
Üks lisavasisaldava vahemälu eelis on see, et kui mõni väline seade soovib eemaldada protsessorist mõne vahemälu rea, siis on vaja selleks kontrollida ainult 2. taseme vahemälu. Välja arvavVälistav vahemälu hierarhia nõuab ka 1. taseme kontrollimist.
 
Suuremad arvutid omavad tihti ka vahemälu 2. taseme ning peamälupõhimälu vahel. Seda kutsutakse 3. taseme vahemäluks. See vahemälu on tihti ehitatud protsessorist eraldi kiibi peale ja võib omada suurust 2 kuni 256 MB vahel. Selle lisamine maksab väga palju ja selle vahemälu eeliseid on rohkem näha suurte andmehulkade juures, mida eikohtab näepõhiliselt tavalise PC tüüpi arvutiserverarvutite juures. Selle vahemälu maksumus on põhjus, miks PC protsessorid ei oma sellist vahemälu.
 
===Näide: K8===
Et illustreerida mõlematspetsialiseeritud spetsifikatsioonining ja mitmeastmelistmitmetasemelist vahemälu on siin välja toodud AMD ATHlonAthlon 64 vahemälumälu alamsüsteemi hierarhia, mille tuuma disain on tuntud kui K8. ([http://www.sandpile.org/impl/k8.htm detailid siin]):
 
[[Pilt:Cache,hierarchy-exampleK8_malusysteem.png]]
 
K8'l on 4 spetsialiseerunudspetsialiseeritud vahemälu: instruktsioonide vahemälukäsuvahemälu, instruktsioonide käsu-TLB, andmete andme-TLB ja andmete vahemäluandmevahemälu. Kõik needNeed vahemälud on spetsialiseerunud:kõik kohandatud oma ülesande jaoks
 
* Instruktsioonide vahemäluKäsuvahemälu hoiab koopiaid 64 baidi suurustest mälupikkustest ridadestmäluridadest ja hangibväljastab 16 baidi igabaiti tsükligataktis. Iga bait selles vahemälus on salvestatud kümne bitina, lisa bitid märgivad instruktsioonidekäskude piire piiri(see on eeldekodeerimise näide eeldekodeerimisest). Sellel vahemälul on ainult võrdsuskaitsepaarsuskaitse, ECC (Error-correcting code) kaitset ta ei omakasutata. Põhjus on selles, et võrdsuskaitse on lihtsam ja igakahjustatud andmekahjustusandmed saab asendada värske koopiaga mälust (käsuvahemälu ei ole protsessori tuuma jaoks kirjutatav).
 
* Instruktsioonide Käsu-TLB hoiab koopiaid laadurmehhanismioperatsioonisüsteemi tabelilehetabeli sissekannetest (PTE'd). Iga tsüklitakti instruktsioonide hankiminekäsuvõtt omab oma virtuaalaadressi, mis tõlgitakse läbi selle TLB füüsiliseks aadressiks. Iga sissekanne on kas 4 (32-bitises režiimis) või 8 (64-bitises režiimis) baiti mälus. Iga TLB on jagatud kahte sektsiooni, üks PTE'de jaoks, mis salvestavad 4KB lehtede aadresse ja teine PTE'de jaoks mis hoiavad endas 4MB või 2MB lehtede aadresse.
 
* Andmete Andme-TLB omab kahte koopiat, mis hoiavad identseid sissekandeid. Need kaks koopiat võimaldavad kaksühes andmejuurdepääsutaktis tsüklis,kahe etvirtuaalaadressi tõlkidafüüsiliseks virtuaalaadressid füüsilistekstõlkimist. Nagu ka instruktsioonide käsu-TLB on ka see TLB jagatud kaheks.
 
* Andmete vahemäluAndmevahemälu hoiab koopiaid 64 baidistest mälu ridadestmäluridadest. See on jagatud 8 osa vahel (iga osa hoiab 8KB andmeid) ja on võimeline hankimaväljastama kaks 8 baidist andmehulkaandmesõna igas tsüklistaktis, nii kauaeeldusel kuiet need andmed on erinevates osades.