Gesher izbliza
Nehalem mikroarhitektura | Sandy Bridge mikroarhitektura (klik za uvećanje) |
Dekodiranje x86 instrukcija u mikrooperacije je komplikovan posao zbog varijabilne dužine instrukcija. Zbog ovoga često imamo neporavnat pristup instrukcijskom kešu, prazne cikluse u dekoderu i manji dotok instrukcija, koji automatski znači i slabije iskorišćenje izvršnih jedinica. Intelovi inženjeri su iskoristili dosadašnja iskustva koja su primenjivana još na Netburst arhitekturi. Pentium 4 je umesto instrukcijskog keša posedovao trace keš. Trace keš sadrži u sebi dekodirane instrukcije, odnosno mikrooperacije koje su fiksne dužine i garantuju ortogonalnost u izvršavanju. Ovime se postiže bolja paralelizacija instrukcija – ILP (Instruction Level Paralelism). Sandy Bridge poseduje µOp cache od 1500 µ-operacija. Ovime se postiže da izvršno jezgro, odnosno „back-end“ uvek bude „upregnut“. µOp cache se donekle razlikuje od trace keša kod Pentiuma 4. Funkcija ovog keša je i čuvanje energije. Ukoliko se programski kod izvršava u petlji, nema potrebe za ponovnim dekodiranjem instrukcija. 1500 mikrooperacija je sasvim dovoljno za većinu programskih petlji. Konceptualno gledano, µOp cache je podskup instrukcijskog keša. Za razliku od trace keša u P4, µOp cache ne zahteva odvojeno praćenje Branch Target Buffera i kompleksnu implementaciju. Osnovna ideja je krenula od „loop stream buffera“ u Core 2 arhitekturi koja je prerasla u keš kod Sandy Bridge-a. µOp cache je organizovan kao matrica od 32×8, gde svaki element matrice, tj. linija sadrži 6 µOperacija. To daje ukupno 1536 µOperacija. Procenat pogotka ovog keša se ceni na nekih 80%, što je ekvivalentno instrukcijskom kešu od 6KB. µOp cache je inkluzivan i njegova kopija nalazi se u u L1 instrukcijskom kešu. Mikrokodovane instrukcije se ne mogu držati u µOp kešu, pa koriste standardni front end. One su samo reprezentovane pokazivačem na lokaciju u mikrokod ROM-u. Za razliku od Pentiuma 4, Sandy Bridge poseduje i L1 instrukcijski keš od standardnih 32KB, sa osmostrukom 8-way asocijativnošću. IF – Instruction Fetch, dovlačenje instrukcija iz L1 keša se odvija brzinom od 16-bajtova po ciklusu. Ovime je omogućeno dekodiranje u proseku do 2,5 instrukcije po ciklusu identično kao i kod Core 2 i Nehalem mikroarhitekture. Tu su 4 dekodera, od kojih su tri prosta, koji dekodiraju po jednu x86 instrukciju u jednu mikrooperaciju. Kompleksni dekoder je u stanju da dekodira instrukcije koje sadrže više mikrooperacija i koje su komplikovanije za izvršavanje, a to su često mikrokodovane instrukcije (Opisane svojstvenim „mini programom“ u mikrokod romu unutar procesora. Ovakve instrukcije često imaju veću latenciju i manji troughput). Ukupan broj je četiri mikrooperacije koje dekoderi mogu da isporuče, bez obzira na tip instrukcija koji se izvršava. Većina novih AVX vektorskih instrukcija se tretira kao jedan mikroop zahvaljujući pametnoj implementaciji unutar izvršnih jedinica. SANDY BRIDGE dekoderi kao i kod Nehalema, podržavaju makro fuziju, spajanje specifičnih x86 operacija u jedan mikroop. Ovo je jedna od ključnih prednosti u odnosu na AMD K10 arhitekturu. Kao i dekoderi, µOp keš može da isporuči do 4 µ-operacije po ciklusu u „red dekodiranih instrukcija“ (28 µOp decoder queue). µOp keš može da radi sa celim 32-bajtnim instrukcijskim okvirom. Lokacije tj. linije u µOp kešu su adresirane putem Instruction Prefetchera, počev od prve dekodirane x86 operacije, pa je keš virtualno adresiran, redom, instrukciju po instrukciju. Ulazi u kešu su tagovani, pa dva treda mogu da particionišu µOp cache. Svaki 32 bajtni okvir koji je mapiran u kešu sadrži maksimum 18 mikrooperacija. Ako 32B okvir sadrži više od 18 mikrooperacija, ne može se smestiti u µOp cache i onda se koristi standardni front end. S obzirom da SANDY BRIDGE može da prihvati komade od 32 bajta instrukcija, ovo efektivno duplira protok u odnosu na standardni front end. Kod AMD K10 arhitekture je ovo rešeno jednostavno. Povećan je IF bandwidth na 32-bajta po ciklusu. Iako je AMD-ov pristup jednostavniji, Intelov je daleko više energetski efikasan. 32-bajtni dotok instrukcija je neophodan pri korišćenju SIMD operacija, naročito AVX koji koriste 2 ili 3 bajtni prefiks. Sve mikrooperacije koje dolaze iz standardnog front-end-a kao i iz µOp keša isporučuju se u 28 µOp red dekodiranih instrukcija. Red, odnosno „queue“ je struktura podataka gde je prvi element koji je ušao, zadnji izlazi. Ova struktura se ponaša kao keš pri izvršavanju malih petlji, kao u Nehalem arhitekturi i spaja mikrooperacije iz standardnog front enda i µOp keša.
Ključna razlika između Net Burst trace keša i µOp keša je u tome što je trace keš zamena za standardni front end, dok kod Sandy Bridge-a to nije slučaj, već predstavlja nadogradnju na već ionako vrlo efikasan dizajn.
Out Of Order izvršavanje je unapređeno kod SANDY BRIDGE jezgra. Glavna razlika je u povećanom broju „instrukcija u letu“. OoO prozor je povećan, pa sad ROB – ReOrder Buffer sadrži čak 168 ulaza, u odnosu na 128 kod Nehalem arhitekture. ROB-a sadrži uređenu listu instrukcija. Instrukcije koje su dodate na kraj liste se uklanjaju nakon što su izvršene. Na ovaj način instrukcije se uklanjaju u istom poretku kao što su i raspodeljenje na izvršavanje. Implementacija ROB-a predstavlja obično kružnu povezanu listu, gde pokazivač sa kraja pokazuje na početni element liste. Struktura u Reorder Bufferu sadrži status registra, memorijsku adresu instrukcije, mikrooperaciju i imena arhitekturalnih registara koji se koriste.
Instrukcije koje su dekodirane u mikrooperacije do 4 po klok signalu, su pohranjene u ROB od ulaza 0 do ulaza 168 u striktnom redosledu po kome je pisan programski kod. Na početku kada je lista prazna, startna pozicija buffera i krajnja pozicija buffera pokazuju na nulti ulaz. Punjenje ROB-a kreće od pozicije 0 i puni se jedna po jedna redom. Posle nekog vremena pokazivač sa kraja buffera pokazuje gde će sledeća mikrooperacija biti sačuvana, a početak buffera pokazuje na najstariju mikrooperaciju u njemu, što odgovara najstarijoj instrukciji u programu. U „retire“ fazi, proceosor uklanja po četiri najstarije mikrooperacije iz buffera. Tada se oslobađaju mesta za nove mikrooperacije. Procesor uvek dodaje nove mikrooperacije na kraj bafera inkrementirajući pokazivač na kraj buffera i isto tako uklanja najstariju mikrooperaciju inkrementirajući pokazivač na početak buffera.
Veći ROB buffer omogućuje efikasnije punjenje scheduler-a, odnosno RS – Reservation Station-a, odakle se dalje izvršavanje odvija na izvršnim jedinicama. Veći broj instrukcija u letu povećava IPC – broj instrukcija po ciklusu, zbog toga što u slučaju Data Cache miss-a ili iz bilo kog drugog razloga da dotok podataka nije dovoljno efikasan, Out Of Order mašina može da nastavi sa izvršavanjem instrukcija koje mogu da se izvrše i to se vrši paralelno.
Razlog za povećan broj lokacija za instrukcije u letu je verovatno i uvođenje AVX seta 256-bitnih vektorskih instrukcija. Količina podataka sa kojima ove instrukcije operišu je daleko veći nego kod standarnog integer i floating point koda.
Sandy Bridge koristi Phyisical Register File bazirani renamer. Isti pristup je primenio i AMD kod Bulldozer i Bobcat mikroarhitektura, kao i IBM sa svojim Power procesorima. Kod P6 dizajna ROB koristi RRF – retirement register file, gde se pohranjuju informacije o izvršenim instrukcijama, o čemu smo pisali u redovima iznad. Izvršene mikrooperacije upisuju svoje rezultate iz ROB u RRF. U PRF dizajnu svi podaci se drže u ovom bufferu gde postoje odvojene strukture koje sadrže status informacije i fizičke registre. Retire se obavlja jednostavnim promenama mapiranja tako da arhitekturalni registri pokazuju na korektnu vrednost u PRF-u, pri čemu se ne vrši pomeranje podataka iz arhitekturalnih u fizičke registre.
Reorder Buffer kod PRF dizajna ne sadrži kompletne informacije o registrima, već samo pokazivače na PRF. Sistem rada ROB-a je isti, uz pomoć kružne liste, ali informacije koje sadrži su pokazivačkog tipa, zbog čega nema transfera podataka iz arhitekturalnih u fizičke (rename registre). Kod Nehalem arhitekture vrednosti podataka se kopiraju iz Reorder Buffera u RRF – Retirement Register File.
Ovime se postiže efikasnije OoO izvršavanje i bolja energetska efikasnost. Kod In-Order procesora kakav je na primer Atom, broj arhitekturalnih registara odgovara broju fizičkih, dok kod Out Of Order arhitektura preslikavanje je surjektivno – više elemenata jednog skupa može da se slika u jedan element drugog skupa. Razlog tome leži u činjenici da IA arhitektura sadrži samo 16 registara. Sa tako malim brojem registara ne bi bio moguć efikasan Out Of Order.
Front End je u stanju da isporuči do 4 mikrooperacije po ciklusu za 2 threada. Celobrojne (integer) mikrooperacije koriste zaseban PRF, dok operacije sa pokretnim zarezom FP (floating point) koriste FP PRF.Bilo koja mikrooperacija koja koristi memorijski pristup mora da alocira svoje mesto u PRF-u, za load ili store buffer. Sandy Bridge ima unifikovani „scheduler“ odnosno RS, koji je deljen između 2 threada, kao kod Nehalema, s tim što je broj ulaza povećan sa 36 na 54. U scheduler-u mikrooperacije čekaju svoj red na izvršavanje. Kada je mikrooperacija spremna ona se šalje na odgovarajući izvršni port, odnosno odgovarajuću izvršnu jedinicu, kao i kod prethodnih P6 mikroarhitektura. SANDY BRIDGE, baš kao i Nehalem može da pusti u opticaj do 6 mikrooperacija i u retire fazi da vrati do 4 mikrooperacije po ciklusu.
Sandy Bridge pored ovoga ima implementirane AES instrukcije, koje postoje još od Westmere procesora. One su mikrokodovane. Povećan je i broj read i write buffera, što i ne čudi s obzirom da je urađen kompletan redizajn keš arhitekture i da je povećan data bandwidth.
Dodaj komentar