2017
informatika
Nem-strukturált szimulációk automatikus gyorsítása videokártyákon OpenMP segítségével
Témavezető:
Dr. Reguly István
Dr. Reguly István
Összefoglaló
A fizikai, biológiai és ipari szimulációk számításigénye folyamatosan növekszik. Szimulációk gyorsítására az elmúlt években elterjedt több olyan módszer is, amelyek a GPU-k számítási teljesítményének kiaknázásával érik el a kívánt teljesítményt, ilyen lehetőség például a CUDA vagy az OpenACC. Ezen eszközök használata nagy előismereteket igényel, így az adott tudományterületen dolgozóktól nem várható el, hogy a folyamatosan fejlődő technikákat megismerjék. Valamint nem áll rendelkezésünkre általános, minden gyorsító esetén használható módszer.
Az OP2 egy nyílt forrású keretrendszer, ami nem-strukturált térhálókon történő szimulációkhoz generál párhuzamosított kódot. Az OP2 képes a szimuláció egy előre elkészített absztrakt leírásából szekvenciális, CPU-n párhuzamosított, GPU-k segítségével gyorsított kódokat generálni, így az eszközök használata nem igényel nagy előismereteket.\
A négyes verziótól kezdve GPU-val történő gyorsításra is lehetőséget nyújtó OpenMP egy már jól bevált API platformfüggetlen párhuzamosításra. Az ezáltal nyújtott lehetőség nem korlátozódik egy adott GPU-ra vagy GPU családra, így a jövőben növelheti a kód újrafelhasználhatóságát.
Jelen dolgozat alapjául az OP2 keretrendszerhez készítettem az OpenMP 4.5-ös verzióját támogató generátort, amely a szimuláció absztrakt leírásából képes a megfelelő, OpenMP segítségével gyorsított kód elkészítésére, amelyet aztán akár egy GPU-n, akár MPI segítségével több GPU-n is futtathatunk. Munkám során két fejlesztés alatt álló fordítóprogrammal dolgoztam és ezeket teszteltem, valamint a jobb teljesítmény érdekében fejlesztési lehetőségeket kerestem. A folyamat során sikerült azonosítani több, a futásidő növekedésével járó hibát, mint például az egyes kernelekben használt adatok folytonos mozgatása GPU és a host memória között. Hasonló teljesítményvesztéseket azonosítottam skalár értékek használata esetén. Észleltem fordítóprogrambeli hibákat, melyeket visszajelzésem alapján a fejlesztők javítottak. Az egyes adatok elhelyezkedése a memóriában, és ezek olvasásának mintázata is jelentős hatással van a teljesítményre. Az adatok átrendezésével nagy javulást tudunk elérni, így munkám során a generátorhoz hozzáadtam egy lehetőséget automatikus konverzióra, amivel tovább növelhető a teljesítmény.
Ezek után két, nem-strukturált szimuláció segítségével értékeltem ki a generált kódok teljesítményét, valamint összehasonlítottam a fent említett, már régóta használt módszerek teljesítményével.
Az OP2 egy nyílt forrású keretrendszer, ami nem-strukturált térhálókon történő szimulációkhoz generál párhuzamosított kódot. Az OP2 képes a szimuláció egy előre elkészített absztrakt leírásából szekvenciális, CPU-n párhuzamosított, GPU-k segítségével gyorsított kódokat generálni, így az eszközök használata nem igényel nagy előismereteket.\
A négyes verziótól kezdve GPU-val történő gyorsításra is lehetőséget nyújtó OpenMP egy már jól bevált API platformfüggetlen párhuzamosításra. Az ezáltal nyújtott lehetőség nem korlátozódik egy adott GPU-ra vagy GPU családra, így a jövőben növelheti a kód újrafelhasználhatóságát.
Jelen dolgozat alapjául az OP2 keretrendszerhez készítettem az OpenMP 4.5-ös verzióját támogató generátort, amely a szimuláció absztrakt leírásából képes a megfelelő, OpenMP segítségével gyorsított kód elkészítésére, amelyet aztán akár egy GPU-n, akár MPI segítségével több GPU-n is futtathatunk. Munkám során két fejlesztés alatt álló fordítóprogrammal dolgoztam és ezeket teszteltem, valamint a jobb teljesítmény érdekében fejlesztési lehetőségeket kerestem. A folyamat során sikerült azonosítani több, a futásidő növekedésével járó hibát, mint például az egyes kernelekben használt adatok folytonos mozgatása GPU és a host memória között. Hasonló teljesítményvesztéseket azonosítottam skalár értékek használata esetén. Észleltem fordítóprogrambeli hibákat, melyeket visszajelzésem alapján a fejlesztők javítottak. Az egyes adatok elhelyezkedése a memóriában, és ezek olvasásának mintázata is jelentős hatással van a teljesítményre. Az adatok átrendezésével nagy javulást tudunk elérni, így munkám során a generátorhoz hozzáadtam egy lehetőséget automatikus konverzióra, amivel tovább növelhető a teljesítmény.
Ezek után két, nem-strukturált szimuláció segítségével értékeltem ki a generált kódok teljesítményét, valamint összehasonlítottam a fent említett, már régóta használt módszerek teljesítményével.
Dr. Reguly István