AMD Bulldozer – kislapát vagy munkagép?

Egy újabb göröngyös út

Szinte kivétel nélkül minden koncepció véges fejlesztési potenciállal rendelkezik; természetesen ezalól az x86-os processzorok mikroarchitektúrája sem képez kivételt. Az elmúlt években forgalomba került AMD processzorok szinte kivétel nélkül a K10.5 elnevezésű megoldáson alapultak, mely a K10 továbbfejlesztése. Ez utóbbi pedig a K8 egyenes ági leszármazottja, mely gyakorlatilag a még 1999(!) júniusában bemutatott K7 alapjaira épült fel anno. Ugyan némi vért és verejtéket izzadva a mérnököknek sikerült még durván 10%-ot kipréselni ebből a vonalból a Llano kódnevű fejlesztés Husky magjaival, de az már korábban nyilvánvaló volt, hogy a főkoncepció már megérett a nyugdíjazásra. Ezzel természetesen a tervezők is tisztában voltak, így nagyjából 6 évvel ezelőtt egy már alapjaiban új megoldáson kezdtek el munkálkodni, amely a K8 Hammer (magyarul kalapács) elnevezés után egy földtoló munkagépről kapta a nevét.

A Bulldozer kódnéven futó koncepció meglehetősen hosszú története még valamikor valamikor 2005-ben kezdődött. Ekkor az AMD saját éves Analyst Day névre hallgató rendezvényén egy érdekes dia látott napvilágot.

A kép a multi-threading megoldásokat taglalta. Most a továbbiak megértéséhez először is ismerkedjünk meg a multi-threading fogalmával!

A multi-threading (magyarul többszálúsítás) röviden valamilyen speciális hardveres megoldást takar, melyben a végrehajtószálak minden esetben osztoznak bizonyos erőforrásokon. Az, hogy ezek a bizonyos egységek pontosan mit takarnak, az mindig a koncepciótól függ. A többmagos megoldásokkal (multi-core) szemben – mely több önálló, teljes értékű magot kapcsol egy lapkába a számítási teljesítmény növelése érdekében – ezen eljárás fő célja a már rendelkezésre álló erőforrások minél hatékonyabb kihasználása.

Az x86-os processzorok világában először az Intel alkalmazott kereskedelmi forgalomba kerülő termékeknél ilyen technológiát. A processzorgyártó egy, az először IBM által 1968-ban lefektetett SMT (simultaneous multi-threading) elvén működő eljárás mellett tette le a voksát, melyet végül Hyper-Threading névre kereszteltek el. A Hyper-Threading egy már meglévő problémára jelentett megoldást. Nagyon röviden és tömören az egész lényege, hogy egy fizikai magban a feldolgozás során keletkező üresjáratokat is kihasználják egy második szál (angolul thread) hozzáadásával. Az első Hyper-Threadingre képes, Netburst (P4) alapú Xeon CPU-t 2002-ben dobta piacra az Intel. Nem véletlenül ez az architektúra kapta meg először a HT-t, a Netburst ugyanis nagyon sokat vesztett azon, hogy hosszú futószalagja volt. Ezt fel lehetett tölteni egy másik szál utasításaival, mely a már rendelkezésre álló erőforrások hatékonyabb kihasználását tette lehetővé a plusz egy szálnak szükséges néhány extra dedikált egység hozzáadásával. Ezek csak minimális szilíciumtöbbletet (~5%) jelentettek egy magra levetítve. Ezzel ettől kezdve egy mag két teljesen egyenértékű végrehajtószállal rendelkezhetett, amiket az operációs rendszerek egy-egy teljesen különálló processzorként/magként érzékeltek.

A Hyper-Threading hatékonysága alkalmazás- és architektúrafüggő, de elmondható, hogy out-of-order felépítésnél optimális esetben kb. 20% teljesítménynövekedést hozhat. Asztali és mobil környezetben csak Atomnál láthatunk sokkal nagyobb számokat a kezdetlegesebb in-order felépítésének köszönhetően. A technológia sajátosságai miatt ritkán előfordulhat, hogy a HT jelenléte semmilyen vagy szélsőségesebb esetben negatív hatással van a végrehajtási sebességre, ezért néhány esetben maguk a szoftverek készítői tanácsolják kikapcsolását. A Hyper-Threading technológiával egy korábbi cikkünkben már jóval részletesebben foglalkoztunk.

Ahogy az oldal tetején lévő képről is leolvasható, az AMD sosem preferálta az SMT-alapú megoldásokat. Ennek egyik hivatalosan ki nem mondott oka lehetett, hogy az akkoriban aktuális K8/Hammer mikroarchitektúra merőben eltért az Intel Netburstjétől. Ez dióhéjban azt jelenti, hogy ha több végrehajtó egység tudna egy utasítást kezelni, akkor az utasítássorrend dönt arról, hogy ez melyikhez kerül; mindez egy szálon is okoz némi problémát, viszont több szál esetében nagyon felerősödik ez a negatív tulajdonság. Ez a K7/K8/K10 belső utasításütemező részének túlzott leegyszerűsítéséből fakad. Ezen túlmenően a Hyper-Threadingből származtatható plusz teljesítményt – feltehetőleg a korábban említett okok miatt – nem tartották elég konzisztensnek. A szóban forgó diáról az is könnyen leolvasható, hogy a gyártó figyelme leginkább egy úgynevezett Cluster-based multi-threading (klaszter-alapú többszálúsítás) felé irányult, mely a korai prognózisok alapján még plusz 50% szilícium felhasználása mellett 80% teljesítmény növekedést ígért.

No de mi is az a Cluster-based multi-threading? A koncepció félig-meddig a Sun által tervezett SPARC architektúrás (azaz nem x86!) UltraSPARC T1 és T2 esetében bevezetett "Chip multi-threading" nevű rokonára hasonlít. Előbbi dióhéjban arról szól, hogy egy lapkán belül több mag (az említett T1 és T2 kapcsán maximum 8) található, melyek osztoznak bizonyos erőforrásokon (cache, FPU stb.), és emellett egy-mag(juk) képes SMT-szerűen több szálat (4-8) is futtatni, melyeket a rendszer a Hyper-Threading esetében már felvázolt módon külön magoknak ismer fel.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés