AMD K8 | |
---|---|
CPU | |
Produktion | fra 2003 til 2014 |
Fabrikant | |
CPU frekvens | 1,6-3,2 GHz |
FSB frekvens | 800-1000 MHz |
Produktionsteknologi | 130-65 nm |
Instruktionssæt | AMD64 (x86-64) |
Stik | |
Kerner | |
AMD K7AMD K10 |
K8 er en x86-kompatibel CPU - mikroarkitektur udviklet af AMD Corporation . Først introduceret 22. april 2003: De første Opteron-processorer blev frigivet til servermarkedet. Baseret på denne mikroarkitektur blev familierne af mikroprocessorer Opteron, Athlon 64 , Athlon 64 X2 , Turion 64 produceret . Det er en radikalt redesignet, væsentligt forbedret og udvidet version af den tidligere generation af AMD K7 mikroarkitektur . De nye processorer formåede at overvinde en række problemer, der var akilleshælen til K7, og introducerede også en række fundamentalt nye løsninger.
K8-mikroprocessorerne er superskalære processorer, multipipeline- , brancheforudsigende og spekulative eksekveringsprocessorer. Ligesom AMD K7- og Intel P6-processorerne er de teoretisk set i stand til at udføre op til 3 instruktioner pr. ur. Som enhver moderne x86-processor omkoder K8 først det eksterne komplekse CISC - sæt af x86-instruktioner til interne RISC -lignende mikrooperationer, som til gengæld allerede udføres. For at forbedre ydeevnen inden for mikroarkitekturen implementeres spekulativ eksekvering med brancheforudsigelse og lanceringen af Out-of-Order mikrooperationer ; for at reducere indvirkningen af dataafhængigheder, anvendes teknikker til omdøbning af register , resultatfremsendelse og en række andre.
K8 mikroarkitekturen bruger en pipeline med 12 trin, hvoraf en væsentlig del er i instruktionsdekoderen.
Det største problem ved afkodning af x86-instruktioner er, at de har forskellige længder (fra 1 til 15 bytes). I K8 løses dette problem ved at adskille processen med at mærke instruktionsstrømmen og faktisk afkode i to separate underopgaver, der udføres i forskellige processorblokke. Faktum er, at før de placeres i cachen på første niveau for instruktioner (L1I) , gennemgår de præ-afkodningsproceduren med en hastighed på 4 bytes instruktioner pr. ur. Og opmærkningsoplysningerne er placeret i en særlig række af tags, der er knyttet til L1. Dette forenkler yderligere, fungerende afkodning og reducerer pipelinen. Denne løsning er unik, fordi andre x86-processorer (undtagen K7) bruger forskellige teknikker til at løse dette problem. Så i Intel P6-processorer udføres opmærkning på farten, mens i Intel NetBurst afkodes instruktioner, før de gemmes i L1 (i stedet for standardinstruktionscachen bruges en speciel, ret kompleks struktur, der gemmer allerede afkodede mikrooperationer - sporingscachen).
K8 har en dual-channel sæt-associativ cache med en nyttelast på 64 KB og en linje på 64 bytes. Ud over selve instruktionerne gemmer processoren dog også en række markup-tags - 3 bits pr. L1-byte, det vil sige omkring 21 KB, såvel som grenprædiktorbeskrivelser - omkring 8 KB.
Fra L1 hentes instruktioner med det samme i 16-byte blokke, som sendes samtidigt gennem en speciel buffer ( fetch -buffer), til udførelsespipelinen og til grenprædiktorblokken. I grenprædiktoren analyseres instruktionsblokken ved hjælp af en speciel grenadressebuffer ( BTB ) på 2048 indgange og tilhørende grenhistoriktabeller (BHT) med en samlet kapacitet på 16K indgange, samt nogle hjælpeenheder. Hvis instruktionsblokken indeholdt et hop, vil den næste blok blive hentet fra den forudsagte adresse. Desværre er grenprædiktoren en for kompleks enhed til at køre i processorens fulde tempo, så alle forudsigelser udføres med en latenstid på 2 cyklusser, dvs. hvis processoren støder på en overgang, så vil den næste hentning fra L1 være udføres først efter en cyklus. I de fleste tilfælde opvejes denne forsinkelse af, at der er mange instruktioner i en 16-byte blok, og den samlede hentehastighed er førende.
Fra hentebufferen går instruktionerne til dekoderen. Hver x86 K8-instruktion tilhører en af tre klasser:
DirectPath og DirectPathDouble betragtes som simple, mens VectorPath betragtes som komplekse. Faktisk har K8 2 forskellige dekoderblokke, der arbejder parallelt og supplerer hinanden. Hovedblokken er et kompleks af tre simple dekodere, der arbejder sammen og afkoder op til tre DirectPath - og DirectPathDouble - instruktioner pr. ur i enhver kombination. Den anden blok omhandler udelukkende VectorPath- instruktioner og afkoder en sådan instruktion pr. cyklus. Når en VectorPath- dekoder kører, er de tilsvarende stadier af simple dekodere deaktiveret. K8-dekoderen kan således betragtes som en ret effektiv og produktiv enhed, der kan omkode op til tre simple eller en kompleks instruktioner pr. ur. Som et resultat af afkodning pakkes MOP'er gennem mellembuffere i specielle grupper på tre MOP'er pr. gruppe (linjer). MOP'er i gruppen følger strengt i rækkefølgen af den originale programkode , ingen permutation udføres. MOP'er af DirectPath- og DirectPathDouble- instruktioner kan blandes på enhver måde (bortset fra multiplikationsinstruktionen, som er afkodet til 2 MOP'er og altid passer på én linje), MOP'er af en DirectPathDouble- instruktion kan endda være placeret i forskellige linjer, men alle MOP'er af VectorPath- instruktioner skal følge i et helt antal grupper og kan ikke blandes med MOP'er fra simple instruktioner, hvilket fører til en vis fragmentering og ufuldstændig udfyldning af grupper, men er dog ikke en hyppig situation, da langt de fleste instruktioner i K8 er enkle.
Et interessant træk ved K8 er, at processoren inde i den fungerer i grupper på 3 MOP'er, hvilket kan reducere mængden af processorkontrollogik betydeligt. I Intel-processorer, selvom MOP'er går i grupper på nogle stadier af pipelinen , spores hver MOP stadig separat. En anden stor forskel mellem K8- og Intel-processorer er, at den afviger fra princippet om maksimal forenkling af mikrooperationer. Faktum er, at x86 CISC -kommandosystemet indeholder et stort antal instruktioner såsom Load-Op (load + execution) og Load-Op-Store (load + execution + unload). Da alle moderne x86-processorer er RISC, er sådanne instruktioner inde i processoren opdelt i et stort antal MOP'er, som hver udfører sin egen simple handling. Så en typeinstruktionadd eax, mem; vil blive opdelt i mindst 2 MOP'er - indlæsning fra hukommelsen og selve tilføjelsen , det vil sige, at antallet af MOP'er, der skal udføres, betydeligt kan overstige antallet af originale x86-instruktioner, de vil fylde de interne stier og buffere af processoren, der ikke tillader opnå en hastighed på 3 operationer pr. cyklus.
I K7- og K8-mikroarkitektur-processorerne besluttede udviklerne at omgå dette problem ved at lave MOS to-komponent. Hver MOP i disse processorer består af to elementære instruktioner: en mikroinstruktion af heltal eller flydende komma aritmetik + en mikroinstruktion af adresse aritmetik . Instruktioner som Load-Op og Load-Op-Store kan således afkodes i K8 til kun én MOS, hvilket sparer processorressourcer og dermed forbedrer effektiviteten.
Hvis det er nødvendigt, må en af MOP-komponenterne ikke anvendes og vil blive udfyldt med en blank. En instruktion af typen Load vil således blive omkodet til kun én MOP, der kun indeholder adressekomponenten. Det skal siges, at i de nye Intel-processorer, til en række Load-Op- instruktioner , bruges en lignende mekanisme til at fusionere mikrooperationer til én MOP med dens efterfølgende opdeling før start af MOP'en til udførelse, som kaldes mikrofusion. .
En gruppe på tre to-komponent MOSFET'er forlader dekoderen og styres yderligere af processoren som helhed ved hjælp af en speciel enhed - ICU . MOP-grupper gennemgår stadierne med registeromdøbning og ressourceallokering og placeres derefter i ROB . I ROB lagres grupper af instruktioner indtil fratrædelsestidspunktet, frafald af instruktioner udføres straks af hele gruppen, når alle MOP'er i gruppen er eksekveret, og kun i den prioriterede rækkefølge angivet af kildeprogrammet. ROB-kapaciteten på K8 er 24 grupper, hvilket svarer til 72 MOP'er eller 144 mikrooperationer. K8-processoren bruger et statisk skema til at distribuere instruktioner blandt udførelsesenheder, det vil sige, i hvilken gruppe af FU [ ukendt udtryk ] MOS'en vil blive lanceret afhænger direkte af denne MOS's position i gruppen. I alt har processoren tre instruktionsplanlæggere for heltal- og adressearitmetik i henhold til antallet af MOP'er i en gruppe.
Fra ROB'er kopieres instruktioner til planlægningsbuffere. Processoren har tre planlægningskøer til Int -operationer og tre til adresseoperationer, hver med en kapacitet på 8 mikrooperationer. I det generelle tilfælde kan instruktioner fra hver kø lanceres til udførelse i FU'en uafhængigt af hinanden og ved brug af Out-Of-Order. Det vil sige, at instruktionerne sendes til FU i den rækkefølge, som processoren har brug for. Processoren indeholder tre 64-bit ALU'er og tre AGU'er , hver parvis forbundet med sin egen planlægger.
Layoutet og udførelsen af MOP'er af flydende aritmetik udføres i en speciel separat enhed. Til deres udførelse indeholder processoren en FMUL- enhed , en FADD og en FMISC, som er hjælpe.
AMD processorer | |||||||||
---|---|---|---|---|---|---|---|---|---|
Liste over AMD mikroprocessorer | |||||||||
Ude af produktion |
| ||||||||
Faktiske |
| ||||||||
Lister | |||||||||
Mikroarkitekturer |