AMD Bulldozer
Bulldozer

Bulldozer on AMD:n kehittämä suoritinarkkitehtuuri, jonka ensimmäiset suorittimet yhtiö julkaisi lokakuussa 2011. Bulldozerin kehitystyö tehtiin puhtaalta pöydältä, koska aiempien K7-johdannaisten suoritinmallien rakenne oli vanhentunut eikä niissä ollut enää varaa parannuksiin. Esimerkiksi Tomasulo-pohjainen käskyjen uudelleenjärjestely haluttiin vaihtaa PRF-pohjaiseen, joka voisi mahdollistaa sekä suuremman kellotaajuuden että pienemmän virrankulutuksen.
Bulldozer-pohjaiset suorittimet valmistettiin 32 nanometrin valmistusprosessilla GlobalFoundriesin tehtailla.
Bulldozerin rakenne perustuu kahdesta ytimestä koostuvaan moduliin, jossa ytimillä on yhteinen L2-välimuisti, L1-käskyvälimuisti, käskynhaku- ja käskyndekoodauslogiikka sekä liukulukuyksikkö mutta erilliset kokonaislukudatapolut ja L1-datavälimuistit.
Arkkitehtuuri on suunniteltu moduulina, jossa edustaosa ja liukulukuyksikkö (FPU) ovat jaettuja, mutta kokonaislukuyksikkö on monistettu.
Edustaosa sisältää käskyjen haun, dekoodauksen sekä haarautumisen ennakoinnin. Edustaosa on jaettu kahdelle ytimelle moduulissa, jossa on kaksi ydintä. 
Edustaosa voi hakea ja dekoodata neljä x86-käskyä kellojaksoa kohden. Dekoodaus tuottaa joko sisäisiä mikro-operaatioita ("cops") tai viittauksia mikrokoodiin. AMD kutsui ratkaisua "klusteroiduksi monisäikeistykseksi" (CMT).
L2-välimuistin koko on 2 MiB/moduuli, L1-käskyvälimuistin koko on 64 kiB/moduuli, ja L1-Datavälimuistin koko on 16 kiB/ydin. Datavälimuisti on 4-tie-assosiatiivinen.
Molemmissa kokonaislukuytimissä on kaksi ALUa ja kaksi AGUa jotka kykenevät suorittamaan yhteensä neljä itsenäistä arimeettista laskutoimitusta ja neljä muistioperaatiota kellojaksossa yhdessä moduulissa.
Ennen julkaisua kerrottiin suorittimessa olevan "Flex FP" -ratkaisu, jossa yksi liukulukuyksikkö (FPU) on jaettu kahden ytimen välillä: 16-ytimisessä suorittimessa olisi kahdeksan liukulukuyksikköä. Flex FP -yksiköt voivat suorittaa 256-bittisiä liukulukukomentoja AVX-käskylaajennoksella. AVX-yhteensopiva ohjelmakoodi voi suorittaa "kahdeksan 32-bittistä tai neljä 64-bittistä komentoa kellojaksoa kohden". Flex FP koostuu kahdesta 128-bittisestä FMAC-yksiköstä, jotka voivat suorittaa FMAC-, FADD- ja FMUL-käskyjä joko yhdistettynä 256-bittisenä tai jaettuna kahdeksi 128-bittiseksi käskyksi.
Bulldozer suunniteltiin alun perin toimimaan melko suurella kellotaajuudella, jonka johdosta siinä oli esimerkiksi välimuisteilla pitkiä viiveitä jotka huononsivat kellojaksokohtaista suorituskykyä, mutta suunnitelma oli että se mitä kellojaksokohtaisessa suorituskyvyssä olisi hävitty, olisi voitettu suuremmalla kellotaajuudella. Bulldozer-pohjaiset piirit eivät kuitenkaan toimineet niin suurella kellotaajuudella kuin alun perin oli suunniteltu, ja säiekohtainen suorituskyky jäi heikoksi.
Lisäksi L1-käskyvälimuistin joukkoassosiatiivisuus oli liian pieni suhteessa välimuistin kokoon siten että yhden välimuistisetin koko oli suurempi kuin virtuaalimuistisivun koko, joka johti välimuistin aliasointiongelmaan, joka hidasti suoritinta selvästi tietyissä tilanteissa.
Välimuistiongelmiin julkaistiin myöhemmin korjauksia, joilla suorittimen suorituskykyä pystyttiin parantamaan muutamilla prosenteilla.
Jotta piiri kellottuisi lähellä alkuperäistä tavoitekellotaajuutta, sitä käytettiin melko suurellaselvennä jännitteellä, ja lopputuloksena suorittimet kuluttivat paljon virtaa ja niiden yhden säikeen suorituskyky oli silti vastaaviin Intelin suorittimiin nähden heikko. Bulldozerien suorituskyky oli myös merkittävästi huonompi kellolta kellolle vertailussa Intelin Sandy Bridge -suorittimiin nähden.