AMD Kaveri: mostanra érett be a vállalat fúziója

A párhuzamosítás dilemmái

Amennyire egyetértenek a gyártók a heterogén módon programozható processzorok jövőjében, olyannyira vannak eltérő nézetek a mély integráció kivitelezésével kapcsolatban. A piac szereplői kellő mennyiségű előadást tartottak már ezekről, így nagyjából lehet tudni, hogy mely vállalatok milyen irányt céloznak meg. Bár a fizikai implementációk szinte minden gyártónál eltérnek majd, a logikai működés tekintetében két nagyobb irányzat alakult ki.

Az egyik opció a Cell működését másolja, illetve közben modernizálja. Ide szeretne nevezni az Intel, mely cég koncepciójában a késleltetésre optimalizált főmagok mellett, megegyező utasításarchitektúrára épülő, adatpárhuzamos végrehajtásra tervezett magok kapnak helyet. Ezzel a modellel a meglévő fejlesztőkörnyezetek – némi felújítás mellett – felhasználhatók, viszont szenvedni fog attól a problémától, amitől a Cell: nevezetesen az extrém nehéz programozhatóságtól.

A többi gyártó inkább egy másik irányt választott, hogy az adatpárhuzamos végrehajtásra tervezett magok utasításarchitektúrája és működése jóval kedvezőbb legyen a fejlesztőknek, illetve segítse a hatékony kihasználást. Ehhez új fejlesztőkörnyezetek és új programozási modellek bevezetése is szükséges, viszont az érintett cégek szerint (ARM, AMD, Qualcomm, NVIDIA és még sokan mások) ez könnyebb programozhatóságot biztosít majd.

Minden esetben a párhuzamosítás kivitelezése jelenti a fő problémát, hiszen e rendszereknek ez a kulcsa. Itt rögtön érdemes leszögezni, hogy a lehetőségek szempontjából egyik sem biztos, hogy rossz irány. Jelenleg mindenki a saját kísérleteit próbálja követni, így természetes, hogy a cégek eltérő véleményen vannak. A jobb érthetőség kedvéért elemezzük, hogy mégis miből lehet választani. Ma leginkább három nagy csoportba sorolható be a párhuzamosítás kivitelezése: SIMD, SMT és SIMT.

Az SMT (Simultaneous Multi-Threading) az egyik legegyszerűbb forma, hiszen tulajdonképpen a mai homogén többmagos processzorok kihasználása ide sorolható. Lényegében a programozó számos programszálat futtat párhuzamosan, és ügyel ezek szinkronizálására. Ez kínálja a program oldaláról a legtöbb flexibilitást, ugyanakkor a hatékonyság szempontjából ez a legrosszabb.

A SIMD (Single Instruction Multiple Data) funkcionálisan igen különböző, mert ennél lényegében valamilyen hosszúságú vektorműveletek párhuzamos futtatása zajlik. Minél hosszabb vektorokra van szükség, annál nehézkesebb optimalizálni rá, hiszen a fordítóprogram nem biztos, hogy tökéletes vektorokat készít a forráskódból, ilyenkor pedig majdnem assembly, azaz igen alacsony szinten kell manuálisan optimalizálni. Többek között a gyártók egy része ezért nem tartja jó koncepciónak a Cell működésének másolását, mivel úgy gondolják, hogy a fejlesztők valami egyszerűbbre vágynak, mintsem 256, 512 vagy később esetleg 1024 bites vektorokat kézzel írogatni. Ugyanakkor amellett, hogy a SIMD által kínált flexibilitás igen korlátozott, a hatékonyság – megfelelően megírt kód mellett – kiváló lehet, tehát a programozás oldalán keletkező kellemetlenségeket teljesítményével képes ellensúlyozni.

A harmadik lehetőség a SIMT (Single Instruction Multiple Thread), ami a legtöbb gyártó szemében az arany középutat jelenti. Nem kínál olyan flexibilitást, mint az SMT, de nem is olyan rossz, mint a SIMD, ezzel egyetemben teljesítménye sem biztos, hogy olyan jó lesz, mind a SIMD-é, ugyanakkor az SMT-nél hatékonyabb. Ez amolyan tipikus kompromisszumos megoldás, amikor engedünk, hogy valahol nyerhessünk, és az új generációs grafikus fejlesztések már ezt a modellt helyezik előtérbe. Példának felhozható az NVIDIA Fermi és Kepler, illetve az AMD GCN architektúrája.

A SIMT előnye a SIMD-hez viszonyítva leginkább a programkódban észlelhető. A párhuzamosítás koncepciója lehetővé teszi, hogy számos esetben a fejlesztő egy szálra levetített kódot írjon általános aritmetikai operátorokkal, ami sokak számára lényegesen kényelmesebb, mint a SIMD-es vektorokra való optimalizálás. Emellett a címszámításnál jóval kedvezőbb a SIMT modell, mivel működésének természete kompenzálja a magas késleltetést anélkül, hogy rontaná a feldolgozók kihasználását. Ez esetenként olyan kódok párhuzamosítását is lehetővé teszi, ami a hagyományos SIMD modellen nem, vagy csak nagyon nehézkesen oldható meg.

Az előbbiek mellett a SIMD és a SIMT modell lényeges különbsége még, hogy előbbit a függőség, míg utóbbit a kihasználtság limitálja. Ha sok az adott kódban a függőség, akkor egyszerűen nem lehet jól munkára fogni a hardveren belüli vektorfeldolgozókat, mivel a szükséges adat még kiszámításra vár. Ez nyilván csökkenti a hatékonyságot. A hardvernek ilyen problémája nincs a SIMT modell mellett, viszont ahhoz, hogy a temérdek feldolgozót kihasználja a programozó, rengeteg programszálat kell párhuzamosan futtatni. Minél kevesebb a futtatott szál, annál kisebb a hardver kihasználtsága.

Természetesen az SMT esetében is kell számolni limitációkkal, de ez leginkább attól függ, hogy a programozó milyen hatékonyan képes a szálak közötti szinkronizációt biztosítani, illetve figyelembe kell venni, hogy a túl sok szinkronizáció már ronthatja a teljesítményt, így az adott feladatra érdemes csak annyi magot használni, amennyivel még hatékony lehet a feldolgozás.

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

  • Kapcsolódó cégek:
  • AMD

Azóta történt

Előzmények

Hirdetés