Itselleni bulldozer oli pettymys, tämän päivän aikana olen sitten vähän miettinyt, mikä meni pieleen, ja tässä vähän ajatuksia siitä:
Osuus: mihin tähdättiin:
1) Piirin piti kellottua n. 30% korkeammalle, kuin K10n samalla valmistustekniikalla. Liukuhihnasta tuli n. 50% pidempi, ja monien käskyjen viiveet on 30-50% pidempiä.
Välimuistille laidettiin kellojaksoissa hitaammat viiveet, jotta piiri kellottuisi ylemmäs
2) Alkuperäisten, karkeiden simulaatioiden mukaan resurssien jakamisen piti haitata vain n. 20% verran suorituskykyä kun moduulin molemmat säikeet on aktiivisena vs 1 säie.
3) Globalfoundriesin 32nm prosessin piti antaa selvästi parempi suorituskyky kuin 45 nm prosessin(pienempi lömmöntuotto/suurempi kellotaajuus)
4) Piirin välimuistirakenne suunniteltiin optimaaliseksi palvelinkäyttöä, ei työpöytäkäyttöä varten. haluttiin tehdä L2-kakusta iso ja poissulkeva L3een nähden, ja tehtiin tässä kompromissi näiden välimuistien nopeuden suhteen.
Fiksujen prefetchereiden piti auttaa saavuttamaan hyvä suorituskyky hitaillakin välimuisteilla.
5) AMDn insinööreille yksi moduli on "ydin".
Mitä taisi mennä eri tavalla kuin alkuperäisissä suunnitelmissa, tai asioita mitä alkuperäisissä suunnitelmissa ei vaan ajateltu..
A) 32nm prosessi on vieläkin kaukana siitä, mitä sen pitäisi olla. Tämä nähtiin hyvin Llanon kanssa, Llanoa ei saada toimimaan edes samoilla kelloilla kuin Phenom IIsta.
Vaikuttaisi siltä, että tällä hetkellä 32nm prosessilla kellotaajuudet on jopa huonompia kuin vastaavan piirin kellotaajuudet 45nm prosessilla, ja tämän johdosta Bulldozerin kellotaajuudet jäivät n. 20% alemmas kuin oli suunniteltu, JA senkin saavuttamiseksi käyttöjännite ja sen myötä virrankulutus ja lämmöntuotto ovat selvästi ylempänä kuin mikä oli tarkoitus
B) Jaettu L1-käskyvälimuisti toimi käytännössä huonommin kuin mitä oli ajateltu. Ongelma virtuaalimuistin aliasoitumisen kanssa sekä liian pieni joukkoassosiatiivisuus. Sitä, miksi tätä ei huomattu ajoissa simulaatiossa, en ymmärrä.
C) Fiksut prefetcherit ilmeisesti tukehtuivat omaan fiksuuteensa, ilmeisesti välimuisteihin prefetchailtiin liikaa kamaa mitä ei tarvittukaan, ja sitten niiden seurauksena sieltä lensi pois kamaa, mitä tarvitaan (tässä on sitten mukaan aika paljon mutua/omaa spekulaatiota, joka voi mennä metsään)
D) Piiriä tullaan kuitenkin käyttämään eniten työpöytäpuolella, jossa prossuytimien välillä jaettavaa dataa on vähemmän, ja L2-välimuistin nopeus on paljon tärkeämpi kuin L3-kakun kapasiteetti.
E) Käyttöjärjestelmien ytimiin ei saatu ajoissa sisään skedulerkoodia, joka osaisi skeduloida softat järkevästi bulldozerin moduleille ja ytimille. Nyt kuormitetaan liikaa saman modulen molempia ytimiä eri prosessien säikeillä, vaikka joku module olisi kokonaan vapaa, eikä toisaalta tajuta laittaa saman prosessin eri säikeitä samalle modulille.
Tässä kyllä pitää syyttää myös AMDtä selvästi; HyperThreadingille optimoidun skedulerin pitäisi toimia melko hyvin myös bulldozerilla, mutta AMD ei ilmeisesti ole saanut aikaiseksi ajoissa edes kertoa microsoftille että "käyttäkää samaa skeduleria kuin intelin HyperThreading-koneilla" vaan nyt windowsilla käytetään bulldozerilla skeduleria joka ei millään tavalla erottele/ryhmittele eri ytimiä. (tällainen skedulervalinta olisi pitänyt saada sisään jo windows7aan, koska bulldozerista tiedettiin tuossa vaiheessa jo tarpeeksi)
F) Markkinointi halusi mainostaa suurempia ydin-lukuja, ja yksi rypäle nimettiin ytimeksi ja "alkuperäistä ydintä" ruvettiin kutsumaan nimellä moduuli.
Näistä sitten seurasi seuraavat asiat:
1+4+A+C+D) Välimuistien suuret viiveet haittaavat merkittävästi yhden ytimen suorituskykyä, eikä piiri saavutakaan sitä kellotaajuutta minkä piti olla "ratkaisu" yhden ytimen suorituskykyyn. Nyt kellot ovat vain hiukan korkeammat, mutta viiveet paljon suuremmat. Lopputuloksena huono yhden ytimen suorituskyky
A+B+C+D+E) Monen ytimen suorituskykykään ei media- ja työpöytäsoftilla eikä peleillä ole sitä mitä sen piti olla, kun L1I-välimuisti pelaa pingistä, jossa pallo vieläpä liikkuu hitaasti hitaan L2-kakun takia, suorituskyky palvelinsoftilla on vielä näkemättä.
5+F) AMD nolasi itsensä totaalisesti, kun markkinoi tätä 8-ydinprossuna, vaikkei se pärjää intelin "4-ydinprossulle". Jos olisivat rehellisesti markkinoineet tätä 4-ydinprossuna, jossa "parempi monisäikeistys kuin intelin HypeThreading", olisi ollut paljon vähemmän selittelemistä.
5+F) Palvelinpuolella saattaa tulla vielä sellainen ongelma, että jotkut softat lisensoidaan "ydinhinnalla", ja näissä hinnoissa hyperthreading lasketaa yhdeksi eikä kahdeksi ytimeksi. Eli 8-modulinen, 16 "ytimen" "Interlagos" saattaa vaatia kalliimman softalisenssin kuin intelin 8-*HT-ytiminen mutta samassa suorituskykyluokassa oleva Xeon, vaikka softalle molemmat näkyvät täysin samalla tavalla 16 ytimenä.
Surullisinta bulldozerissa on välimuistirakenne. Sandy bridge on pienempi piiri lähinnä pienempien välimuistien takia, mutta ne pienemmät välimuistit ovat huomattavasti Bulldozerin välimuisteja nopeampia, ja Sandy bridgen välimuistirakenne nimenomaan mahdollistaa piirille selvästi paremman suorituskyvynkin.
Miten sitten tästä eteenpäin? Miten AMDn pitäisi jatkaa/jatkokehittää bulldozeria. Mitä toivotaan paalunhakkaajaan, höyryjyrään ja kaivinkoneeseen:
1) Välimuistirakenne pitää saada kuntoon.
* Käskykakku kaipaa lisää joukkoassosiatiivisuutta. Kokoa voi vaikka pienentää hiukan.
(Ja jos 64kiB/2sta siirryttäisiin 32kiB/8iin, korjautuisi tuo aliasing-ongelma samalla.. 64kiB/16 korjaisi sen myös, mutta voisi käydä liian hitaaksi)
* L2-kakku kaipaa paljon lisää nopeutta. Kokoa saa pienentää selvästi.
* L3-kakku kaipaa lisää nopeutta. Hitauteen yksi syy poissulkevuus, mutten silti ymmärrä miksi se on NOIN HIDAS(65 kellojaksoa vs SBn 25). Heittäisivät jo vesilintua noilla poissulkevilla kakuilla, hyödyt ei vastaa haittoja.
Tosin ilmeisesti ainakaan L1I-kakku ei vielä piledriverissa ole parantumassa
2) Valmistusprosessi jos alkaisi joskus toimia kunnolla/päästä edes lähelle sitä suorituskykyä, mitä sen pitäisi olla, saataisiin kelloa lisää. Tässä AMD itse ei voi kun odotella, GlobalFoundries on tässä se kenen pitää saada jotain aikaiseksi.
3) Käyttiksien skedulerit pitää saada ymmärtämään millaiset säikeet pitää laittaa minnekin. En tiedä mikä Linuxilla on tässä tilanne, windowsilla windows 8 korjaa tämän.