Cyrix 6x86

Bakgrunn

De fleste mikroprosessorer fra Cyrix Corporation var oppgraderingsprosessorer. Eksempelvis var Cyrix Cx486SLC, Cyrix Cx486SRx² og Cyrix Cx486SRu² å betrakte som ulike avarter av Intel 80486SX, men de passet inn i hovedkort for datamaskiner som var forsynt med Intel 80286 og Intel 80386SX.
På tilsvarende vis var det med Cyrix Cx486DLC, Cyrix Cx486DRx² og Cyrix Cx486DRu². Dette var avarter av Intel 80486DX som passet inn i hovedkort for Intel 80386DX. Da Cyrix Corporation lanserte sin femte generasjon x86 mikroprosessor, fortsatte de denne politikken: Cyrix Cx5x86 passet inn i Socket 3 på systemer med 80486DX.
Cyrix Corporation hadde på denne måten funnet en nisje i markedet. Det var således mulig å oppgradere eldre datamaskiner i stedet for å kassere dem og kjøpe helt nye. Spesielt i den tredje verden hadde dette aktualitet. Cyrix mikroprosessorer var svært populære i Latin-Amerika.
Cyrix Cx6x86 var en fortsettelse av denne strategien: Den passet inn i Socket 5 og Socket 7 som var beregnet for Intel Pentium. Av denne grunn kalles den ofte for en femte generasjons mikroprosessor. På den andre siden inneholder den en rekke egenskaper som ellers bare var å finne i Intel Pentium Pro, og vi har av denne grunn her valgt å kalle den for en sjette generasjon mikroprosessor.

CMOS prosess

Cyrix Cx6x86 var produsert med 650 nanometer CMOS transistorer i utgaver med hastighetene 80-120 Mhz. Utgavene på 133 og 150 Mhz var produsert med 500 nanometer CMOS transistorer. Den strømbesparende avarten Cyrix Cx6x86L, som ble lansert i juni 1997, var produsert med 350 nanometer CMOS. Intel Pentium Pro var produsert med 500 nanometers BiCMOS, og etterhvert med 350 nanometer BiCMOS.

Transistorer

Cyrix Cx6x86 hadde 3,3 millioner transistorer, mot 3,1 millioner i Intel Pentium. Intel Pentium Pro hadde 5,5 millioner transistorer + hurtigminne på 256 Kb (15,5 millioner), 512 Kb (31 millioner) eller 1 Mb (62 millioner).

Hurtigminne

Intel Pentium og Intel Pentium Pro hadde 8 Kb Nivå-1 hurtigminne for data, og 8 Kb for instruksjoner. Cyrix Cx6x86 hadde et delt hurtigminne på 16 Kb for data og instruksjoner. Samtidig var det den eneste x86 mikroprosessor med 256 byte Level-0 hurtigminne for instruksjoner.

Superskalær mikroprosessor

Cyrix Cx6x86 var en toveis superskalær arkitektur; den kunne utføre to heltallsinstruksjoner hver klokkepuls. Dette var identisk med Intel Pentium. Intel Pentium Pro var treveis superskalær og kunne utføre to heltallsinstruksjoner og en desimaltallsinstruksjon hver klokkepuls.

Bussbredde

Databussen var 64-biter og adressebussen 32-biter. Dette ga en teoretisk grense på 4 Gb RAM. Intel Pentium Pro hadde en 36-biter adressebuss (maksimalt 64 Gb RAM).

Tradisjonell CISC-arkitektur

Cyrix 6x86 var en tradisjonell x86 CISC-prosessor. Intel Pentium Pro på sin side hadde en RISC-kjerne, og benyttet emulering av x86 CISC-instruksjonene. Også NexGen 5x86 benyttet denne løsningen, og hadde sitt eget RISC86 instruksjonsett. Også AMD K5 og AMD K6 hadde interne RISC-kjerner og en ytre x86 CISC-arkitektur.

Registeromdøping

Og så kommer vi til den første av fem egenskaper, som gjør det mulig å kalle Cyrix 6x86 for en sjette generasjons x86-arkitektur, eller som i hvert fall fikk Cyrix til å gjøre det. Denne generasjonen hadde innebygd maskinvare som sørget for flyt i programvareutførelsen.
Den første var registeromdøping, der instruksjoner kunne skifte registernavn i løpet av en klokkepuls. Cyrix 6x86 var en superskalær mikroprosessor, som utførte to instruksjoner per klokkepuls. Uten registeromdøping ville serialiseringen ved bruk av prosessorregistre kunne føre til at den superskalære utførelsen stoppet opp.

Oppheving av dataavhengigheter

Instruksjoner kan utføres samtidig, når de ikke er innbyrdes avhengige av hverandre.

 Avhengighet           Ingen avhengighet
 A = 1 + 1             A = 1 + 1
 B = 1 + A             B = 1 + 2
I det første eksempel kan ikke begge beregningene utføres samtidig. Man må beregne A, før man kan beregne B. Intel Pentium kunne i dette tilfellet ikke utføre to avhengige instruksjoner samtidig.
I likhet med andre sjette generasjon x86-mikroprosessorer, hadde Cyrix 6x86 innebygd maskinvare som opphevet slike avhengigheter i programvaren.

Eksekvering utenfor rekkefølge

Den tredje egenskapen henger nært sammen med den forrige, og er også en egenskap ved sjette generasjon mikroprosessorer. Cyrix 6x86 kunne oppdage avhengigheter før de oppstod, og utføre instruksjonene i en annen rekkefølge enn programmet tilsa (eksekvering utenfor rekkefølge):

 Avhengighet           Utførelse i en
                       annen rekkefølge
 A = 1 + 1             A = 1 + 1
 B = 1 + A             C = 1 + 2
 C = 1 + 1             B = 1 + A
A og C (to instruksjoner) kunne utføres samtidig, istedenfor at A og B utføres sekvensielt etter hverandre (én instruksjon av gangen).

Spekulativ utførelse

Den fjerde egenskapen var å utføre et arbeid i forkant av dets programmerte rekkefølge. På denne måten unngikk man en forsinkelse på en senere fase i programmet. Måten dette var implementert på var ved hjelp av en hopp-predikator.

Hopp-predikator

En hopp-predikator er en integrert krets som prøver å gjette utfallet av et hopp i en if-then-else struktur. Hensikten er å forbedre flyten i en instruksjonspipeline.
Betingede hopp kan hemme parallell utførelse. I programmerings-språket C kan dette illustreres slik:

 if (x == 2)                Hvis x = 2
   subrutine1();               så hopp til subrutinen "subrutine1"
 else                       I motsatt fall
   ....                        fortsett med neste instruksjon
I dette tilfelle vet man ikke på forhånd om betingelsen for et hopp til en annen del av programmet er tilstede.
Hopp-predikatoren prøvde å gjette hvilken «grein» (branch) av programmet som fortsetter under betingede hopp, basert på erfaringer fra programutførelsens historikk. Prosessoren hadde et Branch Prediction Buffer bestående av 512 «inngangsporter» til forskjellige utfall av betingelser. Instruksjoner fra forskjellige «greiner» ble hentet, dekodet og utført, før mikroprosessoren visste hvilken «grein» som er korrekt. Når dette var avgjort, ble alle instruksjonene på de feilaktige «greinene» forkastet, mens den korrekte «greinen» ble beholdt.

Manglende støtte for symmetrisk flerprosessering

Cyrix 6x86 manglet støtte for symmetrisk flerprosessering. Dette i motsetning til Intel Pentium Pro, som kunne kjøre fire mikroprosessorer i parallell på et hovedkort.