Bemutatta heterogén jövőképét a HSA alapítvány

A HSA alapítvány a jelenleg is zajló Hot Chips rendezvényt választotta, hogy először beszéljenek a HSA mélylélektanáról a nagyközönség előtt. Az előző év nyarán bejelentett összefogás mára óriásira duzzadt, így gyakorlatilag a világ legjelentősebb cégei álltak be támogatónak, illetve az egyetemek is nagyon érdeklődnek. A tagok listáját ma már egyszerűbb egy képpel jellemezni, így írásos felsorolás helyett mi is ezt tesszük.


[+]

A HSA alapjait korábban már részleteztük, így nem ismételnénk meg az akkor leírtakat, hiszen így is elég sok új dolog derült ki. A főtámogatók a HSAIL virtuális utasításkészletet, a memóriamodellt és az úgynevezett queuing (sorban álló parancsok) modellt részletezték. Utóbbi kettő alapvetően szorosan kapcsolódik a HSAIL-hez, de ezek megértése fontos a programozók számára, így külön előadásokat kaptak. Az alapítvány tagjai elmondták, hogy a fejlesztés a háttérben már évek óta zajlik, így az előző év csak a bejelentésről szólt, de az idei és a következő esztendő már a gyakorlati alkalmazás szempontjából lesz érdekes. A HSA alapítvány egyébként sok párhuzamot vont a Javával az alapkoncepciót tekintve, ugyanis a HSA azt akarja elérni, amit a Java, viszont ehhez hozzáadja a teljesítményt. A fejlesztő számára a HSA alapvetően egy egyszerűen programozható platform lesz, ami alapvetően biztosítja azt, hogy a program egyetlen forrásból minden hardveres fusson, és tegye ezt a lehető leggyorsabban, a hardverben található erőforrások maximális kihasználásával.


[+]

A HSAIL-t a cél elérése és az átláthatóság érdekében végtelenül egyszerűre tervezte az alapítvány. Mindössze 136 utasításból áll, vagyis még a Java bytecode-nál is egyszerűbb, illetve nagyon hasonlít egy RISC processzor utasításarchitektúrájához. A HSA platform alapvetően a párhuzamosságra van tervezve és támogatja az adatpárhuzamos, illetve a feladatpárhuzamos programozási modelleket is. A HSAIL-ben azonban nincs explicit párhuzamos konstrukció, helyette minden kernel egy feladategységhez tartalmaz operációkat. A HSA egy úgynevezett gridet hoz létre, amiben rengeteg munkacsoport található, és azon belül vannak a feladategységek. A hardver számára ezekből lesz kialakítva egy olyan, egymástól független feladategységeket tartalmazó feladattömb, ami megfelel az adott rendszer feldolgozóinak. Utóbbi része a HSA-nak gyártóspecifikus, és erre a fejlesztőknek érdemes figyelni, de a rendszer úgy van felépítve, hogy minimális optimalizálással is kiváló eredményeket lehet elérni.


[+]

A HSA esetében az alapítvány kihangsúlyozta, hogy a platform nem ellenfele semminek. Tökéletesen illik az OpenCL és a C++ AMP koncepciójába, így kiegészíti azokat, de a főbb cél, hogy a programozók maradhassanak a C++ és a Java mellett. Maga a HSA memóriamodellje is úgy lett tervezve, hogy kompatibilis legyen a C++11, a Java és a .NET memóriamodelljével. Itt persze nem kötelező megállni a HSA ugyanis bármilyen programnyelvet képes támogatni a C-től kezdve a RenderScripten át a JavaScriptig, vagy a HTML5-ig.

A működés szempontjából a HSA-nak több alappillére van. A legfontosabb az egységes virtuális memória és virtuális címtér. Ez manapság a heterogén módon programozható rendszerek legnagyobb problémája, ugyanis a különböző feldolgozók különálló memóriát használnak, így az adatok folyamatos másolására van szükség. A HSA azonban megfordítja ezt a helyzetet, és a fejlesztők felé az üzenete, hogy ne az adatot mozgassák, hanem a feladatot, annak megfelelően, hogy a késleltetésre, vagy az adatpárhuzamos munkavégzésre optimalizált processzor az ideális ahhoz.


[+]

Hogy az előbbiek a mainál kisebb büntetésekkel járjanak a HSA egy átgondolt queuing modellt vezet be. A sorban álló parancsokat tároló listák létrehozását és kivégzését a HSA futtatókörnyezet (runtime) intézi. A parancsokat tartalmazó csomagok (packet) a felhasználói módból kerülnek direkten a listákba egy erre tervezett protokollon keresztül. Az új queuing modell motivációja a mai modellek teljes reformja és a szoftverből eredő késleltetések extrém mértékű csökkentése. Az alábbi két kép megmutatja a különbséget, ami valóban drámai.

HSA nélkül és HSA-val HSA nélkül és HSA-val
HSA nélkül és HSA-val [+]

A HSA futtatási modellje a SIMT lett, ami a single instruction, multiple thread rövidítése, vagyis egy utasítás végrehajtása több szálon történik. Ennek a módszernek az előnye, hogy a programozó számára jól átlátható. Emellett minden feladategységhez önálló utasításszámláló tartozik. A HSA dispatch modellje is a kényelemre, valamint az ütemezés túlterhelésének elkerülésére törekszik. Minden magnak (legyen az késleltetésre vagy adatpárhuzamos végrehajtásra optimalizált) saját listája van a sorban álló parancsokról. Ezt a már említett futtatókörnyezet vezérli, de a magok ütemezhetnek új munkát egy másik magnak, vagy akár maguknak egy-egy új listába. Mindez ráadásul alkalmazásonként érvényes, tehát több program futtatása esetén a futtatókörnyezet mindegyik programhoz saját listákat rendel a magok szempontjából.

A HSA alkalmazás kétféle módban érkezhet. A fejlesztő biztosíthatja a forrást, amit aztán a platform lefordít HSAIL kódra és a többit elvégzi az gyártóspecifikus finalizer és kernel driver, ami a HSAIL kódból az adott hardver számára emészthető kódot alakít ki. A fordítás történhet valós időben, vagy esetleg telepítéskor is. A fejlesztőknek ugyanakkor lehetőségük van bináris kódot szállítani, amiből ugyanúgy elkészülhet a HSAIL kód, és innen az előbbi módon egyenes út vezet a hardverhez.

Fontos szempont, hogy a HSA alapítvány a HSA platform több részelemét is megnyitja a fejlesztők előtt, így a nyílt forráskódot előnyben részesítő közösség már el is kezdett ezekkel dolgozni. A HSA futtatókörnyezetet nyílt lesz, de a HSA alapítvány adja majd ki, vagyis annak komoly hitelesítésen kell átesnie, ugyanis ez garantálja, hogy a különböző hardvereken ugyanaz a forráskód ugyanúgy fusson. A HSA finalizer és a HSA kernel driver gyártóspecifikus, ugyanis a cégek itt alakítják ki úgy a saját implementációjukat, hogy az adott HSAIL kód jól fusson az adott hardveren. Ezek a részelemek természetesen zártak lesznek. A HSA Bolt, a HSAIL kódgerenátor, a HSA assembler, valamint az LLVM tartozékok nyílt forráskódúak lesznek.

A tapasztalatok szempontjából megjegyzendő, hogy a bristoli egyetem az elsők között jelentkezett a HSA egyetemi programba, és a tapasztalataik nagyon kedvezők. Olyan beágyazott párhuzamos programok hozhatók létre, mint ami az előbbi képen látható, továbbá több algoritmus is támogatott, akár egyetlen programon belül. A HSA alapítvány szerint a HSA számottevően leegyszerűsíti a heterogén rendszerek programozását. A legtöbb HSA Bolt kód megegyező hosszúságú, mint az adott feladat végrehajtásához szükséges egyszálú algoritmus kódja, miközben a teljesítménye bármelyik hardveren a specifikusan optimalizált OpenCL kód tempóját hozza.

Azóta történt

Előzmények

Hirdetés