AMD K8 | |
---|---|
CPU | |
Produktion | från 2003 till 2014 |
Tillverkare | |
CPU- frekvens | 1,6-3,2 GHz |
FSB- frekvens | 800-1000 MHz |
Produktionsteknik | 130-65 nm |
Instruktionsuppsättningar | AMD64 (x86-64) |
kontakt | |
Kärnor | |
AMD K7AMD K10 |
K8 är en x86-kompatibel CPU - mikroarkitektur utvecklad av AMD Corporation . Introducerades först 22 april 2003: De första Opteron-processorerna släpptes för servermarknaden. Baserat på denna mikroarkitektur producerades familjerna av mikroprocessorer Opteron, Athlon 64 , Athlon 64 X2 , Turion 64 . Det är en radikalt omdesignad, avsevärt förbättrad och utökad version av den tidigare generationens AMD K7 -mikroarkitektur . De nya processorerna lyckades övervinna ett antal problem som var K7:ans akilleshäl, och introducerade även ett antal fundamentalt nya lösningar.
K8-mikroprocessorerna är superskalära , multipipeline-, grenprediktiva och spekulativa exekveringsprocessorer. Liksom AMD K7 och Intel P6-processorerna är de teoretiskt kapabla att exekvera upp till 3 instruktioner per klocka. Som alla moderna x86-processorer kodar K8 först om den externa komplexa CISC - uppsättningen av x86-instruktioner till interna RISC -liknande mikrooperationer, som i sin tur redan exekveras. För att förbättra prestandan inom mikroarkitekturen implementeras spekulativ exekvering med grenförutsägelse och lanseringen av Out-of-Order mikrooperationer ; För att minska påverkan av databeroende används tekniker för att byta namn på register , vidarebefordran av resultat och ett antal andra.
K8-mikroarkitekturen använder en pipeline med 12 steg, varav en betydande del finns i instruktionsavkodaren.
Det största problemet med att avkoda x86-instruktioner är att de har olika längder (från 1 till 15 byte). I K8 löses detta problem genom att separera processen att märka instruktionsströmmen och faktiskt avkoda i två separata deluppgifter som körs i olika processorblock. Faktum är att innan de placeras i den första nivåns cache för instruktioner (L1I) , går de igenom föravkodningsproceduren med en hastighet av 4 byte instruktioner per klocka. Och uppmärkningsinformationen placeras i en speciell uppsättning taggar associerade med L1. Detta förenklar ytterligare, fungerande avkodning och minskar pipelinen. Denna lösning är unik eftersom andra x86-processorer (förutom K7) använder olika tekniker för att lösa detta problem. Så i Intel P6-processorer utförs markering i farten, medan i Intel NetBurst avkodas instruktioner innan de lagras i L1 (istället för standardinstruktionscachen används en speciell, ganska komplex struktur som lagrar redan avkodade mikrooperationer - spårningscachen).
K8 har en dubbelkanals set-associativ cache med en nyttolast på 64 KB och en rad på 64 byte. Men förutom själva instruktionerna lagrar processorn också en rad markup-taggar - 3 bitar per L1-byte, det vill säga cirka 21 KB, såväl som grenprediktordeskriptorer - cirka 8 KB.
Från L1 hämtas instruktioner omedelbart i 16-byte block, som skickas samtidigt, genom en speciell buffert ( fetch -buffert), till exekveringspipelinen och till grenprediktorblocket. I grenprediktorn analyseras instruktionsblocket med användning av en speciell grenadressbuffert ( BTB ) med 2048 poster och tillhörande grenhistoriktabeller (BHT) med en total kapacitet på 16K poster, såväl som vissa hjälpanordningar. Om instruktionsblocket innehöll ett hopp, kommer nästa block att hämtas från den förutsagda adressen. Tyvärr är grenprediktorn en alltför komplex enhet för att köras i processorns fulla takt, så alla förutsägelser utförs med en latens på 2 cykler, det vill säga om processorn stöter på en övergång, kommer nästa hämtning från L1 att vara exekveras först efter en cykel. I de flesta fall kompenseras denna fördröjning av det faktum att det finns många instruktioner i ett 16-byte-block, och den totala hämtningshastigheten leder.
Från hämtningsbufferten går instruktionerna till avkodaren. Varje x86 K8-instruktion tillhör en av tre klasser:
DirectPath och DirectPathDouble anses vara enkla, medan VectorPath anses vara komplexa. Faktum är att K8 har 2 olika avkodarblock som fungerar parallellt och kompletterar varandra. Huvudblocket är ett komplex av tre enkla avkodare som arbetar tillsammans och avkodar upp till tre DirectPath - och DirectPathDouble - instruktioner per klocka i valfri kombination. Det andra blocket behandlar uteslutande VectorPath- instruktioner och avkodar en sådan instruktion per cykel. När en VectorPath- avkodare körs är motsvarande steg för enkla avkodare inaktiverade. Således kan K8-avkodaren anses vara en ganska effektiv och produktiv enhet som kan koda om upp till tre enkla eller en komplex instruktioner per klocka. Som ett resultat av avkodningen packas MOP:er om genom mellanliggande buffertar till speciella grupper om tre MOP:er per grupp (linjer). MOP:er i gruppen följer strikt i den ursprungliga programkodens ordning , ingen permutation utförs. MOPs av DirectPath- och DirectPathDouble- instruktioner kan blandas på vilket sätt som helst (förutom multipliceringsinstruktionen, som är avkodad till 2 MOPs och alltid passar på en rad), MOPs av en DirectPathDouble- instruktion kan till och med placeras på olika rader, men alla MOPs av VectorPath- instruktioner måste följa i ett helt antal grupper och kan inte blandas med MOPs från enkla instruktioner, vilket leder till viss fragmentering och ofullständig fyllning av grupper, men är dock inte en vanlig situation, eftersom de allra flesta instruktioner i K8 är enkla.
En intressant egenskap hos K8 är att processorn inuti den fungerar i grupper om 3 MOPs, vilket avsevärt kan minska mängden processorkontrolllogik. I Intel-processorer, även om MOP:er går i grupper i vissa skeden av pipelinen , spåras varje MOP fortfarande separat. En annan stor skillnad mellan K8 och Intel-processorer är att den avviker från principen om maximal förenkling av mikrooperationer. Faktum är att kommandosystemet x86 CISC innehåller ett stort antal instruktioner som Load-Op (load + execution) och Load-Op-Store (load + execution + unload). Eftersom alla moderna x86-processorer är RISC, är sådana instruktioner inuti processorn uppdelade i ett stort antal MOPs, som var och en utför någon enkel åtgärd av sin egen. Så en typinstruktionadd eax, mem; kommer att delas upp i minst 2 MOPs - laddning från minnet och tillägg i sig, det vill säga antalet MOPs som behöver exekveras kan avsevärt överstiga antalet ursprungliga x86-instruktioner, de kommer att fylla de interna vägarna och processorns buffertar, vilket inte tillåter uppnå en hastighet av 3 operationer per cykel.
I K7- och K8-mikroarkitekturprocessorerna bestämde sig utvecklarna för att komma runt detta problem genom att göra MOS tvåkomponenter. Varje MOP i dessa processorer består av två elementära instruktioner: en mikroinstruktion av heltals- eller flyttalsaritmetik + en mikroinstruktion för adressaritmetik . Således kan instruktioner som Load-Op och Load-Op-Store avkodas i K8 till bara en MOS, vilket sparar processorresurser och därmed förbättrar dess effektivitet.
Vid behov får en av MOP-komponenterna inte användas och kommer att fyllas med ett blanksteg. Således kommer en instruktion av typen Load att kodas om till endast en MOP som endast innehåller adresskomponenten. Det måste sägas att i de nya Intel-processorerna, för ett antal Load-Op- instruktioner , används också en liknande mekanism för att slå samman mikrooperationer till en MOP med dess efterföljande uppdelning innan man startar MOP för exekvering, vilket kallas mikrofusion. .
En grupp av tre tvåkomponents MOSFET:er lämnar avkodaren och styrs vidare av processorn som helhet med hjälp av en speciell enhet - ICU . MOP-grupper går igenom stadierna för registerbyte och resursallokering och placeras sedan i ROB . I ROB lagras grupper av instruktioner fram till avsägningsögonblicket, avsägningen av instruktioner utförs omedelbart av hela gruppen, när alla MOPs i gruppen exekveras, och endast i den prioritetsordning som anges av källprogrammet. ROB-kapaciteten för K8 är 24 grupper, vilket motsvarar 72 MOP eller 144 mikrooperationer. K8-processorn använder ett statiskt schema för att distribuera instruktioner mellan exekveringsenheter, det vill säga i vilken grupp av FU [ okänd term ] som MOS kommer att lanseras beror direkt på positionen för denna MOS i gruppen. Totalt har processorn tre instruktionsschemaläggare för heltals- och adressaritmetik enligt antalet MOP:er i en grupp.
Från ROB kopieras instruktioner till schemaläggarbuffertar. Processorn har tre schemaläggarköer för Int -operationer och tre för adressoperationer , var och en med en kapacitet på 8 mikrooperationer. I det allmänna fallet kan instruktioner från varje kö startas för exekvering i FU oberoende av varandra och med användning av Out-Of-Order. Det vill säga instruktionerna skickas till FU i den ordning som processorn behöver. Processorn innehåller tre 64-bitars ALU :er och tre AGU:er , var och en kopplad i par till sin egen schemaläggare.
Layouten och utförandet av MOP:er av flytande aritmetik utförs i en speciell separat enhet. För deras exekvering innehåller processorn en FMUL- enhet , en FADD och en FMISC, som är extra.
AMD -processorer | |||||||||
---|---|---|---|---|---|---|---|---|---|
Lista över AMD-mikroprocessorer | |||||||||
Utgått ur produktion |
| ||||||||
Faktisk |
| ||||||||
Listor | |||||||||
Mikroarkitekturer |