Menüü
· Viimane number
· A&A konverentsi slaidid
· Küberturve
· Tudengitelt
· E-õpe
· Videomaterjalid
· Avalikud loengud
· Ilmunud numbrid
· Magistrirubriik
· Teemad
· Otsi
· Tellimine
· Küsitlused
· Soovita meid
· Tagasiside
· Top 10
· Statistika
· Toimetuskolleegium

Logi sisse
Kasutajanimi

Parool

Registreeri kasutajaks
Unustasid parooli?

Jäljevahemälu
Postitatud: Thursday, May 08 @ 10:38:26 EEST by Arvo Toomsalu

Riistvara
Ilmus numbris 02/2002


Superskalaarsete protsessorite jõudluse kasv saavutatakse põhiliselt rööpselt töödeldavate käskude arvu suurendamise teel. Pidevalt kasvavad nõuded niisuguste lülituste infoläbilaskevõimele, mis tegelevad käsuvõtu ja selle ettevalmistamisega töötluseks. Tänapäevane superskalaarne protsessor sooritab igal taktil mitte mitme käsu võtu, vaid mitme põhi- ehk baasploki (basic block) võtu. Keskmiselt sisaldab põhiplokk 4...6 käsku. Käsuvõtul pöördutakse tüüpiliselt käsuvahemälu poole, et aga seal säilitatavate käskude järjestus ei lange enamasti kokku käskude tegeliku täitmise järgnevusega protsessoris, siis hakkab käsuvahemälu piirama protsessori jõudlust.

Erinevalt skalaarseist protsessoreist on superskalaarprotsessoreis käsuvõtt ja käsutöötlus teineteisest eraldatud käsuväljastust korraldavate lülituste (väljastuspuhvrite) poolt. Käsuvõtt hõlmab käskude võtu, dekodeerimise, jaotamise ja suunamise väljastuspuhvritesse. Väljastuspuhvrid, näiteks ootejaamad, moodustavad tervikliku üksuse, mida nimetatakse käsuaknaks (joonis 1). Käsuakna mehhanism võimaldab jadaprogrammide töötlemisel ära kasutada käsutasemelist parallelismi ning seeläbi suurendada protsessori jõudlust. Mida laiem on käsuaken, seda kergem on leida käsuvoost andmesõltuvusevabu käsukomplekte, mida rööpselt suunata töötlusüksustesse.

Kui protsessor suudab ühe taktiga töödelda näiteks kümme käsku, siis peab käsuvõtuüksus olema võimeline igal taktil sooritama vähemalt kümne käsu rööpse võtu. Vähema arvu käskude võtt toob kaasa jõudluse languse.

Protsessoris tuleb lahendada kolm üksteisega seotud ülesannet, st. tagada kõrge tootlikkus käsuvõtul, andmevõtul ja infotöötlusel. Kui ei õnnestu lahendada esimest ülesannet, siis pole võimalik lahendada ka kaht järgnevat.

Piisavalt kõrge käsuvõtuvõime saavutamine pole lihtne - on mitmeid tegureid, mis takistavad käsuvõtuüksusel selle saavutamist. Olulisemad neist on :

  1. möödalasud käsuvahemälus
  2. vääralt prognoositud hargnemised käsuvoos, mille tulemusena käsuvõtuüksus sooritab ka nende käskude võtu, mida hiljem ei täideta
  3. üldised muudatused käsuvoo kulgemises. Kui käsud saabuvad käsuvahemälust, siis ühel taktil on raske sooritada nii hargnemist põhjustava käsu kui ka hargnemisaadressil asuva käsu võttu.
Frame2.JPG

Enamikul juhtudel suudavad protsessorite käsuvõtuüksused ühe takti jooksul prognoosida vaid ühe tingimusliku siirde suuna. See tähendab, et igal taktil saab sooritada vaid ühe põhiploki võtu. Nagu märgitud, sisaldab tüüpiline põhiplokk keskmiselt 4...6 rööpselt töötlusesse suunatavat käsku. Seega ei piira protsessori jõudlust sageli mitte niivõrd töötlusseadmete arv, kui lihtsalt ei jätku töödeldavaid käske. Kui saavutatakse olukord, et igal taktil suudetakse prognoosida mitu hargnemissuunda (siirdesuunda), siis tähendaks see seda, et käsuvõtuüksus peab igal taktil sooritama mitme järjestikku täidetava põhiploki võtu. See pole aga siiski nii lihtne, kui esmapilgul näib.

Tüüpiliselt salvestatakse käsud käsuvahemällu selles järjestuses, nagu need reastati programmi transleerimisel. Programmide (käsujadade) säilitamine staatilises vormingus on sobiv juhul, kui programmis esineb harva hargnemisi või on tegemist käskude pikkade põhiplokkidega. Kahjuks ei esine praktikas selliseid programme just tihti. Märksa sagedamini esineb olukordi, kus käskude tegelik töötlemise järjekord erineb oluliselt nende paiknemisest käsuvahemälus. Kui programmi töötlemisel läbitakse käskude neli põhiplokki järjestuses

A ® B ®C ®D ®E,

siis käsuvahemälus võivad need põhiplokid paikneda hajali näiteks nii, nagu on kujutatud joonisel 2.

Toodud näite korral tuleb sooritada neli pöördust käsuvahemällu; esimesel pöördusel toimub põhiplokkide A ja B, teisel C, kolmandal D ja neljandal E võtt. Isegi kui käsuvõtuüksus suudaks ühel taktil prognoosida kolm hargnemissuunda, ei kiireneks protsessori talitlus, sest käsuplokid ei paikne käsuvahemälus järjestikku, nende võttu ei saa sooritada ühe taktiga.

Frame3.JPG

Olukord muutuks oluliselt paremaks, kui käskude põhiplokid oleksid käsuvahemällu salvestatud sellises järjestuses, nagu neid programmi täitmisel tegelikult läbitakse, st. dünaamilises järjestuses. Just sellisest põhimõttest lähtutakse käskude salvestamisel nn. jäljevahemällu (trace cache).

Jäljevahemälu lülitamine protsessori mikroarhitektuuri annab võimaluse uue vaatenurga alt läheneda programmi talitluse kirjeldamisele protsessoris. Selle asemel et vaadelda programmi kui teatavat käskude jada, võib seda vaadata kui käsujälgede jada.

JÄLJEVAHEMÄLU TÖÖPÕHIMÕTE

Üheks teeks, kuidas ületada klassikaliste käsuvahemälude jõudluspiiranguid, oleks selliste käsuvahemälude kasutuselevõtmine, kus samaaegselt saab läbi viia mitut käsuvõttu. Näiteks sobivad selleks multiport-käsuvahemälud. See tähendab aga, et käsuvahemälu tarvis tuleb üheaegselt formeerida mitu pöördusaadressi, üks iga pöördutava käsuploki tarvis. Käsuvõtul multiport-käsuvahemälust tuleb võetud käsud enne töötlusesse suunamist joondada. Selleks peab käsuvõtuüksusesse lisama täiendavaid loogikalülitusi.

Kasutades aga jäljevahemälu, kaob vajadus keeruka multiport-käsuvahemälu ja hulga täiendavate lülituste järele. Et jäljevahemälus paiknevad käsud samas järjestuses, nagu neid programmi töötlusel tegelikult täidetakse, siis käsuvõtuüksusel ei teki raskusi vajaliku hulga käskude võtmisega.

Jäljevahemälus säilitatakse nagu käskude omamoodi "jälgi". Jäljevahemälu puhul kasutatakse mõistet käsuvõtuplokk (fetch block) ehk (käsu)segment (segment). ühte segmenti võib kuuluda mitu käskude põhiplokki. Sisuliselt kujutab segment endast teatavat käskude dünaamilist järjestust, mis algab käsuvõtuaadressiga määratud käsuga ja lõpeb juhtimiskäsuga, mis muudab käsuvoo kulgu. Segmenti kuuluvad käsud ei pea programmis olema järjestikku paiknevatel aadressidel.

Frame4.JPG

Käskude arvu jäljes piirab ühelt poolt konkreetse jäljevahemälu mälurea pikkus, teisalt aga põhiplokkide lubatav arv segmendis. Viimane sõltub hargnemiste ohjega tegeleva üksuse võimsusest, st. mitu hargnemissuunda suudetakse korraga määrata. Põhiliselt piirab aga käskude lubatavat arvu jäljes protsessori töötlusüksuste infoläbilaskevõime.

Informatsiooni mahutavuselt on jäljevahemälud samas suurusjärgus kui käsuvahemälud. Analoogiliselt käsuvahemäluga on jäljevahemälus korraldatud informatsiooni lugemine ja salvestamine. Jälje esmaesinemisel eraldatakse talle jäljevahemälus mälurida, mis täidetakse programmi töötlemise käigus käsuvahemälust võetavate käskudega. Kui käsuvoos esineb antud jälg (sama käivitusaadressiga ja hargnemistega) uuesti, siis ei hakata käske võtma enam mitte käsuvahemälust, vaid võetakse vastav segment jäljevahemälust.

Jäljevahemälu töötab tihedas koostöös hargnemiste prognoosiüksusega. See peab olema võimeline igal taktil prognoosima töötlusele kuuluvate käskude järjestuse ka mitme hargnemise korral. Mitut hargnemist prognoosiva üksuse prognoositäpsus ei tohi olla palju madalam kui sellel, mis otsustab vaid ühe hargnemise üle.

Klassikaliseks võtteks protsessori jõudluse tõstmisel on taktsageduse suurendamine. Jäljevahemälu kasutamisel superskalaarses protsessoris peab arvestama, et käsuvõtukiiruse tõustes pikeneb suhteline aeg, mis kulub hargnemissuuna kindlaksmääramisele, ning väärprognooside korral kasvab "kaotatavate" taktide arv.

S. J. Pateli andmetel tõstab jäljevahemälu protsessori jõudlust kuni 14% ja käsuvõtukiirus võib tõusta kuni 34% [1].

Joonisel 3 on näidatud põhilised funktsionaalsed üksused, mis osalevad protsessori juhtseadmes käsuvõtu korraldamisega. Nendeks on jäljevahemälu (TC), jäljevahemälu täitmisüksus (FLU) , mitme hargnemissuuna prognoosiga tegelev üksus (MBP) ja klassikaline kahetasemeline käsuvahemälu, millest vahetult suhtleb jäljemäluga esimese taseme käsuvahemälu (IC1L).

Programmi töötlemisel on käskude põhiallikaks jäljevahemälu. Jäljevahemälu varustab informatsiooniga (käsusegmentidega) täitmisüksus. Prognoosiüksus sooritab igal taktil mitme hargnemissuuna prognoosi ja tagab, et jäljevahemällu salvestatakse "õigetest käskudest" moodustatud segmendid. Käsuvahemälul on toetav funktsioon, seda kasutatakse siis, kui jäljevahemälus puudub vajalik informatsioon. Jäljevahemälu uute käsusegmentide moodustamisel lähtutakse eeldusest, et enamik hargnemisi kaldub suunduma ühte suunda. Näiteks kui eelnevalt läbiti segmentide järgnevus A ® B ®C ®D ®E, siis selle tee teistkordsel esinemisel käsuvoos on väga suur tõenäosus, et ka nüüd läbitakse sama tee. Seega on otstarbekas nad ühendada jäljeks, mis salvestatakse jäljevahemällu ühtse kirjena. Jälje salvestamisel määratakse ära vaid esimese käsuploki A aadress.

Pöördumisel jäljevahemällu käivitub automaatselt prognoosiüksus ja mehhanism, mis võrdleb valitud segmendi tegelikku läbimisteed prognoositud teega.

Olgu tegemist programmifragmendiga, kus on võimalik näiteks järgmine põhiplokkide järgnevus:

Frame5.JPG

Eeldame, et prognoosiüksus pakkus põhiplokkide läbimisjärjestuseks A B D, kuid programmi täitmisel kujunes järjestuseks A B C. Prognoositud teel on õigesti määratud vaid järgnevus A B. Tekib küsimus, kas jäljevahemällu tuleks salvestada uus jälg AB või kasutada täiendavat selektorlülitust (SL joonisel 3), mille abil saaks olemasolevast jäljest ABD välja valida ja töötlusesse suunata vaid osa käsusegmendi põhiplokke (AB). Esimene lahendus on lihtsam, kuid raiskab jäljevahemälu mäluruumi, teine on universaalsem, kuid riistvaraliselt keerukam. Praktikas eelistatakse enamasti teist varianti.

INFORMATSIOONI KORRALDUSEST JÄLJEVAHEMÄLUS

Üldjuhul koosneb jäljevahemälu segment kuni n käsust, neist m käsku võivad olla tingimuslikud hargnemiskäsud.

Jäljevahemälu mikroarhitektuurne korraldus sarnaneb tavalisele käsuvahemälule. See sisaldab (käsu)ridu, mis on harilikult korraldatud moodul-assotsiatiivse struktuurina. ühe või teise rea valik toimub käsuvõtuaadressi alusel, see suunatakse sildimällu (joonis 2). Sildimälus võrreldakse käsuvõtuaadressi sildimälus säilitatavate koodidega ning nende kokkulangemisel aktiveeritakse andmemälus vastav käsurida. Vaatamata moodul-assotsiatiivsele korraldusele ei salvestata jäljevahemällu üldjuhul segmente, millel on üks ja sama algusaadress. Kui segment põhiplokkide järjestusega ABC on jäljevahemälus juba olemas, siis ei salvestata sinna eraldi segmendina põhiplokkide järgnevust AB. Küll aga võidakse segmendi ABC asemel salvestada segment, kus põhiplokkide järjestuseks on ABD. Et taoline mehhanism toimiks, lisatakse jäljevahemälus iga käsurea vastavale sildireale täiendav teekonna informatsioon (path information). Selles esitatakse kodeeritult käsusegmendis sisalduvate kõigi hargnemiste suunad. Käsuvõtul jäljevahemälust väljastatakse alati vastava segmendi teekonna informatsioon. Nagu märgitud, piiratakse jäljevahemälus samaaegselt mitme ühe ja sama algusaadressiga segmendi säilitamist. Samas on piisavalt näiteid, kus taolist piirangut ei rakendata, see eeldab aga mälu kõrgemat assotsiatiivsuseastet ja paindlikkust.

Jäljevahemäludes ohjel kasutatav juhtinformatsioon võib varieeruda, kuid enamasti sisaldab see järgmist teavet:

  • V - valiidsuse bitt, mis näitab, kas antud jälg on kasutatav või mitte
  • A-silt - määrab kehtiva jälje algusaadressi
  • hargnemise lipud - iga käsusegmendis sisalduva hargnemise tarvis on eraldi lipp. Lipp näitab, kas vastav hargnemine toimub või mitte. Segmendi viimase hargnemise tarvis pole lippu vaja, sest talle ei järgne käsku. Hargnemislippude arv on ühe võrra väiksem kui hargnemiskäskude arv segmendis
  • hargnemise mask - näitab hargnemiste arvu jäljes ja seda, kas jälg lõpeb hargnemiskäsuga või mitte
  • järgmise jälje aadress - osutab aadressile, kus paikneb järgmine jälg juhul, kui viimane prognoositud hargnemine ei leia aset
  • jälje sihtaadress - osutab aadressile, kus paikneb järgmine jälg juhul, kui viimane prognoositud hargnemine toimub.

Jäljevahemälus ei säilitata tagasipöördumis-, kaudseid siirde- ega lõksustuskäske. Käsurea moodustamisel abordib rea käskudega täitmist korraldav lülitus nimetatud käsud. Tingimusteta siirdekäske ja kutsekäske võib vaadelda kui ettemääratud suunaga tingimuslikke siirdekäske, neid võib lülitada tingimuslike hargnemiste klassi.

Et jäljevahemälu struktuur võib olla üpriski keerukas, tõendab kas või S. J. Pateli poolt esitatud mälukorraldus [1]. Tegemist on 16-kanalilise jäljevahemäluga, mille iga rida sisaldab:

  1. kuutteist käsupilu (käske säilitatakse dekodeerituna), iga käsu säilitamiseks vajatakse keskmiselt viit baiti. Igas reas võib olla kuni kolm hargnemiskäsku
  2. et segment koosneb kolmest põhiplokist, siis määratakse neli sihtaadressi. Sihtaadressid säilitatakse ilmutatud kujul, see lihtsustab järgmisel käsuvõtul aadressi formeerimist juhtudel, kui vaid osa segmendist vastab prognoositud teele
  3. informatsiooni teekonna kohta. Kodeeritult esitatakse segmendis sisalduv hargnemiste arv ja suunad. See sisaldab ka bitte, mis näitavad, kas segment lõpeb hargnemisega ning kas hargnemisel on tegemist naasmisega alamprogrammist. Kui segment lõpeb naasmiskäsuga, siis järgmise käsuvõtuaadressi väärtuse määrab naasmisaadresside pinus säilitatav kood.

Kokku sisaldab jäljevahemälu rida 97 baiti informatsiooni (80 baiti käskudele, 16 baiti sihtaadressidele ja 1 bait teekonna kirjeldamiseks).

Segment moodustatakse dekodeeritud käskudest. Enne jäljevahemällu salvestamist analüüsitakse käskudevahelisi sõltuvusi ja saadud tulemuste alusel moodustatakse täiendav juhtinfo. Nii lisatakse iga käsu poolt kasutatava (lähte)operandi jaoks 2-bitine identifikaator (silt), mis näitab, kas vastava operandi väärtus moodustatakse segmenti kuuluva käsu poolt (st. sisemiselt) või välise käsu poolt. Kui operandi väärtus formeeritakse sisemiselt, siis silt näitab, millises segmendis olevas põhiplokis paikneb operandi moodustav käsk. Antud informatsioon on vajalik registrite ümbernimetamist sooritavale lülitusele. Samuti lisatakse identifikaatoribitt ka käsus saadava tulemi tarvis. Viimane näitab, kas tulemit kasutatakse väljaspool antud põhiplokki või mitte. Kõik tulemid, mida kasutatakse väljaspool põhiplokki, nimetatakse ümber ning neile eraldatakse kindel füüsiline register.

Tänu käsusegmendis sisalduvale lisainformatsioonile tuleb enne käskude suunamist käsuaknasse sooritada vaid minimaalselt ümbernimetamisi. Erandi moodustavad üksnes käsud, mille operandide väärtused moodustatakse või tulemeid kasutatakse väljaspool segmenti. Et iga segment läbib eelneva analüüsi, kus tuvastatakse ja fikseeritakse selles sisalduvate käskude omavahelised sõltuvused, siis pole oluline, millises järjestuses paiknevad käsud jäljevahemälu reas.

JÄLJEVAHEMÄLU TÄITMISüKSUS

Täitmisüksuse ülesandeks on koguda käske samas järgnevuses, nagu neid valitakse protsessori poolt töötlemiseks, ning moodustada neist jäljevahemällu salvestatavad käsujäljed. Käsujälgede moodustamiseks lisatakse täitmisüksusesse FIFO-tüüpi täitepuhver (fill buffer), kuhu salvestatakse erustatavad käsud. Käsud suunatakse täitmisüksusesse plokkidena käsuvõtu järgnevuses. Käsujälje moodustamisel läbitakse neli etappi:

  1. tuvastatakse käsujälje algus ja lõpp
  2. valitakse välja jälge moodustavad käsud
  3. langetatakse otsus, kas vastmoodustatud jälg peab asendama mõne jäljevahemälus juba olemasoleva käsujälje
  4. uus käsujälg salvestatakse (kui see on vajalik) jäljevahemällu.

Täitmisüksuses mestitakse nii saabuvaid kui eelneval tsüklil saabunud käsuplokke. Mestimise käigus korraldatakse ümber küll käskude järjestus, kuid säilitatakse informatsioon käskudevaheliste sõltuvuste kohta. Mestimise protsess kestab kuni uue segmendi lõpliku moodustumiseni ehk finaliseerumiseni, st. segmendi võib salvestada jäljevahemällu. Segmendi moodustamine loetakse lõppenuks, kui:

  1. segment sisaldab ettenähtu arvu käske (toodud näite korral 16 käsku)
  2. segment sisaldab lubatava arvu tingimuslikke hargnemisi (näites oli selleks kolm tingimuslikku siirdekäsku)
  3. segment sisaldab ühe kaudsiirdekäsu, naasmiskäsu või lõksustuskäsu
  4. siseneva käsuploki mestimisel olemasolevatega tekib segment, mis ei mahu jäljevahemälureale (kirjeldatud näite korral ületaks 16 käsku).

Mittetingimuslikud siirdekäsud ja programmikutsed ei ole põhjuseks, miks peaks segmendi moodustamise lõpetama. Käsuplokke püütakse üldjuhul mitte jaotada kahe segmendi vahel, v.a. juhtum, kui ületatakse segmendi lubatav maht.

Iga uue käsuploki saabudes täitmisüksusesse toimub üks järgmistest toimingutest:

  1. saabunud käsuplokk mestitakse seni veel lõplikult formeerumata segmendiga, kuid tekkiv segment ei kuulu veel lõplikule sulgemisele (finaliseerumisele)
  2. saabunud käsuplokki ei saa täielikult mestida täiendust ootava segmendiga. Täiendust ootav segment suletakse, saabunud segment jääb ootama uut (saabuvat) käsusegmenti
  3. saabunud käsuplokk mestitakse täielikult teda ootava segmendiga, mestimise tulemusena moodustunud uus segment suletakse.

Täitmisüksusesse võib käsuplokke suunata kas sellises järjestuses, nagu neid suunatakse töötlusesse või nagu neid erustatakse. Kui käsuplokke kogutakse täitmisüksuses erustamise ajal, siis valminud segmente ei salvestata kohe jäljevahemällu, sest pole välistatud, et käske töödeldi spekulatiivselt. Segmentide liiga varajasel salvestamisel tekib oht, et saadud käsuplokid pärinevad vääralt prognoositud teelt. Segmentide formeerimisel erustatavate käskude plokkidest tekib täiendav ajaline viit, see võib mõjuda negatiivselt protsessori jõudlusele.

Jäljevahemälu kasutamisel tekib teatav liiasus jäljevahemälus ja käsuvahemälus säilitatava informatsiooni vahel. Liiasus ei ole tingitud mitte sellest, et mõlemas säilitatakse samu käske, vaid teatavate käsujärgnevuste dubleerimisest neis. Käsujärgnevust, mis sisaldab mittetoimuvaid hargnemisi, võib käsuvahemälus säilitada sama edukalt kui jäljevahemälus. üldjuhul säilitatakse neid paralleelselt aga mõlemas. Joonisel 4 on kujutatud olukord, kus nelja põhiploki (A, B, C ja D) jälgede säilitamine jäljevahemälus põhjustab informatiivse liiasuse ja mäluruumi ebaefektiivse kasutamise.

Frame6.JPG

Mõnikord on otstarbekas eristada kahte käsujälje tüüpi, nn. siniseid ja punaseid jälgi. Sinised käsujäljed koosnevad üksnes jadamisi täidetavaist käskudest. Punastes käsujälgedes sisalduvad ka käsud, mis muudavad käskude töötlusjärjekorda. Punased käsujäljed formeeritakse käsuvoo töötluse käigus ning need salvestatakse jäljevahemällu. Sinised käsujäljed moodustatakse kompilaatori poolt, neid säilitatakse käsuvahemälus. Kui mitte rakendada täiendavaid meetmeid, siis "korjab" täitmisüksus programmi töötlemise käigus üles ka sinised käsujäljed ja salvestab need jäljevahemällu. Varustades täitmisüksuse täiendava lisalülitusega, mis eristab siniseid ja punaseid käsujälgi, saab lubada vaid punaste jälgede salvestamist jäljevahemällu. See kõrvaldaks informatiivse liiasuse jälje- ja käsuvahemälude vahel. Taoliselt ohjatavat jäljetöötlust nimetatakse jälje selektiivseks salvestamiseks ehk STS-ks (STS - Selective Trace Storage). STS-i korral kasutatakse jäljevahemälu mäluruumi otstarbekamalt, väheneb vajatav mälumaht ja alaneb selle maksumus. Meetodi rakendamisel peab arvestama koormuse kasvuga käsuvahemälus ning kõrgenenud nõuetega lülituste suhtes, mis korraldavad käsuvõttu ja käskude järjestamist.

PROGNOOSIÜKSUS

Prognoosiüksuse töö efektiivsusest sõltub oluliselt käsuvõtusüsteemi läbilaskevõime. Selles moodustatakse iga käsujälje tarvis jäljeidentifikaator (trace identifier) ehk indeks (index), mis määrab jälje käivitusaadressi ja kõigi käsujäljes sisalduvate hargnemiste prognoositud hargnemissuunad. Jäljeidentifikaatori alusel toimub jäljevahemälust sobiva jälje otsing. Jäljeidentifikaatori ülesannet võib täita kas jälje algusaadress või algusaadressi ja hargnemistunnuste kombinatsioon. Viimasel variandil on see eelis, et jäljevahemälus saab säilitada kõiki ühe ja sama algusaadressiga, kuid erinevate hargnemissuundadega käsujälgi (käsusegmente). Seda ka siis, kui jäljevahemäluna toimib otsevastandustüüpi mälustruktuur. Jäljevahemälus säilitatakse identifikaatorite väärtusi sildimälu osas.

Et protsessori töötlusüksused oleksid pidevalt varustatud käsuvoogudega, peab hargnemiste prognoosiüksus suutma igal taktil korrektselt prognoosida mitmeid hargnemisi. Vajaliku jõudluse ja prognoosi täpsuse saavutamiseks kasutatakse tihti hargnemiste adaptiivset kahetasemelist prognoosimeetodit. Kahetasemelise süsteemi esimesel tasemel toimub teabe salvestamine kõigi töödeldud käskude puhul asetleidnud hargnemiste kohta. Teisel tasemel salvestatakse spetsiaalsesse mallilootabelisse ehk PHT-sse (PHT - Pattern History Table) tõenäosem tee juhuks, kui esimesel tasemel leiab aset hargnemine antud suunas. Tüüpiliselt rakendatakse PHT-na kahejärgulist kahendloendurit. Kolme prognoosi sooritamiseks ühel taktil peab PHT sisaldama kolme kahejärgulist kahendloendurit, st. üks loendur iga segmenti kuuluva hargnemiskäsu tarvis.

KÄSUVAHEMÄLU

Käsuvahemälu toetab jäljevahemälu. Ta varustab käsuvõtuüksust käskudega vaid juhul, kui jäljevahemälus vajatav segment puudub. Käsuvõtul käsuvahemälust tuleb võetud käsud joondada ja mestida, et moodustuks korrektne käsukomplekt, mida tohib suunata käsuaknasse. Neid ülesandeid täidab joondi-mestimislülitus (A/M-lülitus joonisel 3). Samuti kuuluvad käsud eelnevalt ka dekodeerimisele ning sooritatakse vajalikud ümbernimetamised. Käsuvahemälu mikroarhitektuur peab olema selline, mis tagab igal taktil ühe loogiliselt tervikliku käsuploki võtu. Selleks varustatakse käsuvahemälu kahe rööpselt talitleva pordiga ja tagatakse käsuvõtt mälu kahest naaberreast. Loetud käsud reastatakse ümber sobivasse järjestusse. Juhul kui esineb möödalask nii jälje- kui ka esimese taseme käsuvahemälus, siis tuleb pöörduda kas teise taseme käsuvahemällu või siirduda mälusüsteemis veelgi kaugematele tasemetele. Muidugi toob see kaasa täiendavaid viiteid ning võib ohtu seada töötlusüksuste pideva varustamise käskudega.

JÄLJE- JA KÄSUVAHEMÄLUDE KOOSTÖÖ

Oleks väär arvata, et jäljevahemälu asendab käsuvahemälu või käsuvõtuüksust, ta vaid laiendab käsuvõtuüksuse funktsionaalseid võimalusi ja tõstab käskude läbilaset. Pöördus jälje- ja käsuvahemälude poole toimub rööpselt. Sõltuvalt sellest, kas jäljevahemälus leiab aset tabamus või möödalask, toimub käsuvõtt erinevalt. Tabamusel jäljevahemälus (pöördusaadress ühtib sildiaadressiga ja prognoositud hargnemissuund langeb kokku hargnemise lipu olekuga) loetakse mälust välja vastava aadressiga mälurea sisu. ühtlasi väljastab hargnemisüksus teabe segmendis toimuvate hargnemiste kohta. Selektorlülituse (SL) abil määratakse, milline osa valitud mälureast kuulub jäljemälust väljastamisele. Valikul tuginetakse enamasti konservatiivsele meetodile - kui kogu käsusegmendi käskude täitmise kulg ei vasta prognoositud teele, siis ei väljastata jäljevahemälust midagi. Sisuliselt toimitakse antud juhul samamoodi kui möödalasul mälus. Võimalik on aga ka alternatiivne lahendus, kus jäljevahemälust väljastatakse vaid see osa segmendi käskudest, mis langeb kokku prognoositud teega.

Hargnemisüksuses prognoositakse veel neljaski aadress, millest lähtuvalt käivitatakse järgmisel taktil uus käsuvõtutsükkel. Kui võetud segment lõpeb naasmiskäsuga, siis järgneva käsuvõtu aadress saadakse naasmisaadresside pinust.

Leiab jäljevahemälus aset aga möödalask, siis võetakse kasutusele käsud, mis saabusid käsuvahemälust. ühtlasi kantakse need käsud üle jäljevahemällu, moodustades selleks vastava käsusegmendi.

JÕUDLUSPIIRANGUD JÄLJEVAHEMÄLUS

Jäljevahemälu jõudlus sõltub otseselt jälgede õigest valikust, st. algoritmist, mida kasutatakse dünaamilise käsuvoo jagamisel üksikuteks käsujälgedeks. Jälgede valikust oleneb nii jälje keskmine pikkus (põhiplokkide arv jäljes) kui ka jäljevahemälu tabamusteguri väärtus.

Jäljevahemälu struktuursel lahendamisel peab arvestama mitmeid objektiivseid piiranguid. Nagu käsuvahemälus, on jäljevahemälu mäluread lõpliku pikkusega, seega saab neisse salvestada vaid teatava arvu põhiplokke. Piiratud on lubatavate hargnemiste arv mälureas. Kui prognoosimehhanism suudab ühe taktiga prognoosida m hargnemissuunda, siis ei tohi mälureas sisalduda rohkem kui m hargnemiskäsku.

Eksperimendid on näidanud, et väga pikad käsujäljed vähendavad jäljevahemälu tabamusteguri väärtust [4] (kuigi selle nähtuse põhjuseks võib olla liialt lihtsate strateegiate rakendamine jälgede formeerimisel).

Jäljevahemälu kasutamise põhieesmärgiks on suurendada eeskätt käsuvõtuüksuse läbilaskevõimet, mitte aga vähendada möödalaskude arvu käsuvahemälus. Seega säilivad jäljevahemäluga süsteemideski mälupöörduse kiiruse probleemid. Kui käsuvahemälu tabamustegur pole piisavalt kõrge, siis peab jäljevahemälu ootama, kuni käsuvahemälu suudab vajaliku informatsiooni hankida madalama taseme aeglasematest mäludest. See põhjustab töötlusüksuste alakoormatust või mis veelgi halvem - seisakuid.

Mitmed uurimused kinnitavad, et ka liiga lühikesed käsujäljed põhjustavad protsessori jõudluse langust, sest väheneb käsuvõtuüksuse infoläbilase. Parim lahendus oleks, kui õnnestuks moodustada töödeldavate programmide iseärasustest, lähtudes optimaalse pikkusega käsujäljed.

TARKVARALINE JA PLOKK-JÄLJEVAHEMÄLU

Kõrvuti erinevate riistvaraliste jäljevahemälu variantidega leiavad kasutamist tarkvaralised jäljevahemälud (software trace cache). Tarkvaraline jäljevahemälu tugineb kompileerimise ajal automaatselt toimuvale käskude ümberjärjestamisele. ümberjärjestamise eesmärgiks on saavutada käsuvahemälus minimaalne möödalaskude arv. Vältimaks käsujärgnevuste katkemist, korraldatakse käsuplokid selliselt ümber, et toimuvad hargnemised asenduksid mittetoimuvate hargnemistega.

Sagedasti kasutatavad käsuplokid kantakse käsuvahemälu reserveeritud ossa.

Tarkvaralise jäljevahemälu puuduseks peetaksegi reserveeritud mäluruumi olemasolu, mis kasutab "raiskavalt" käsuvahemälu mäluruumi. Tarkvaralise jäljevahemälu rakendamine pole efektiivne koodi puhul, mis sisaldab palju silmuseid ning vähe hästi prognoositavaid tingimuslikke siirdeid. Mitmed eksperimendid on näidanud, et kuigi tarkvaralise jäljevahemälu korral möödalaskude arv käsuvahemälus väheneb, suureneb samas vääralt prognoositud hargnemiste arv [4]. Tarkvaraline jäljevahemälu on efektiivne neil juhtudel, kui töödeldakse pikki programme, mis sisaldavad vähe silmuseid.

Plokk-korraldusega jäljevahemälu (block-based trace cache) erineb mõneti tavalisest jäljevahemälust. Selle asemel et säilitada kõiki käsujälgi ühes suures jäljevahemälus, kasutatakse väiksema mahutavusega mäluplokke, kus säilitatakse käskude joondatud põhiplokk. Selles jäljevahemälus valitakse töötlusesse suunatavaid käsujälgi jäljetabelist, mis sisaldab plokiviitasid. Jäljetabelis säilitatavate plokiviitade abil moodustatakse tegelik käsujälg, mille alusel valitakse välja vajalikud käskude põhiplokke säilitavad mäluplokid.

Plokk-korraldusega jäljevahemälus hoitakse kokku mäluruumi, seetõttu sobib antud mäluarhitektuur piiratud infomahutavusega jäljevahemälude valmistamiseks. Neis saab vältida informatsiooni liiasust, mis paratamatult esineb tavalises jäljevahemälus. Mahukate jäljevahemälude korral viib aga mälu plokk-korraldus jõudluse langusele.

KOKKUVÕTTEKS

üks võimalusi moodsate superskalaarsete ja arenenud post-RISC-protsessorite arhitektuuri täiustamisel ja jõudluse tõstmisel seisneb jäljevahemälu lülitamises nende mikroarhitektuuri. Jäljevahemälu pakub kompleksset lahendust küsimusele, kuidas korraldada suure hulga käskude rööpset võttu ja prognoosida programmi kulgu mitme hargnemise korral.

Uuringud ja eksperimendid on tõestanud riistvaraliste jäljevahemälude efektiivsust ja vajalikkust käsuvõtusüsteemide struktuursel edasiarendamisel. Kui lühidalt kokku võtta, mida kasulikku annab jäljevahemälu lisamine protsessorisse, siis tuleks märkida järgmist:

  1. jäljevahemälu võib tõsta protsessori jõudlust 15 kuni 35%
  2. kasutades pikemaid (optimaalseid) käsujälgi paraneb hargnemiste prognoosi täpsus
  3. mõõdukalt mahukas ja piisavalt kõrge assotsiatiivsuse astmega jäljevahemälu on sama efektiivne kui võimas (kiire, mahukas ja kallis) käsuvahemälu.

Vaatamata väga suurele huvile, mis praegu valitseb jäljevahemälude vastu, ei saa seda vahemälude liiki pidada piisavalt väljaarendatuks. Jätkuvalt püütakse leida uusi meetodeid, mis võimaldaksid paremini korraldada käsujälgi, parandada prognoosi kvaliteeti ning saavutada käsuvõtuüksuste suurem käskude läbilaskevõime.

KASUTATUD KIRJANDUS

  1. Sanjay Jeram Patel. Trace Cache Design for Wide-Issue Superscalar Processor: a dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy. Computer Science and Engineering in the University of Michigan, 1999
  2. E. Rotenberg, S. Bennett, J. E. Smith. Trace Cache: A Low Latency Approach to High Bandwidth Instruction Fetching. //Proceedings of the 29th Annual International Symposium on Microarchitecture, December 2-4 (1996) Paris, France
  3. D. H. Friendly, S. J. Patel, Y. N. Patt. Alternative Fetch and Issue Policies for the Trace Cache Fetch Mechanism. //Proceedings of Micro-30, December 1-3, (1997), Research Triangle Park, North Carolina
  4. Z. Patel. Trace Cache in the Context of other Cache Enhancements
  5. A. Toomsalu. Post-RISC-arhitektuur. //A&A (2001) 2,3

Arvo Toomsalu
TTü arvutitehnika instituut


 
Seotud lingid
· Veel Riistvara


Kõige populaarsem artikkel kategoorias Riistvara:
Vana flopiseadme uus nägu


Artikli reiting
Keskmine tulemus: 0
Hääled: 0

Oleks tore kui sa annaksid sellele artiklile oma hinnangu:

Super!
Väga hea
Hea
Keskmine
Halb





All logos and trademarks in the site are property of their respective owner(s). Comments are property of their posters, all the rest © 2003 by A&A
A&A elektrooniline väljaanne on valminud IT Kolledži toetusel.
Sait kasutab PHP-Nuke mootorit © 2002. Kõik õigused reserveeritud. PHP-Nuke on GNU/GPL litsensiga tasuta levitatav tarkvara.
Lehe loomiseks kulus: 0.136 sekundit