Bemutatkozott az OpenCL 2.0

Az idei SIGGRAPH alkalmával a Khronos Group nem pihent és rögtön a lényegre tért. Az OpenCL 2.0-t már jó ideje várták a programozók, és a mai napon meg is érkezett az előzetes specifikáció. A 2.0 jelző ráadásul jogos, hiszen a platform megjelenése óta a legnagyobb újítások mutatkoztak be.

A Khronos Group az igényeket látva a elmélyülő integrációra koncentrál, így az OpenCL 2.0 elsősorban az APU-knak lesz hasznos, azon belül is az egységes virtuális memóriát támogató hardvereknek. Az új API ugyanis támogatja a központi processzorok és az integrált grafikus vezérlő között megosztott virtuális memóriát. Sajnos egyelőre ilyen rendszer nincs a piacon, de az AMD már bejelentette, hogy a Kaveri APU-t, ennek az elvnek megfelelően tervezi, és az NVIDIA is támogatni fogja ezt a funkciót a szintén készülő Parker kódnevű rendszerchippel. Egyelőre a többi cég nem állt elő konkrét kódnévvel a támogatásra vonatkozóan, de az ARM, az Imagination, a Vivante és a Qualcomm már jelezte, hogy elkötelezettek mély integráció irányát illetően, így már csak a hardvereket kell kivárni.

Az OpenCL 2.0-ban bemutatkozik a Dynamic Parallelism technika is, mely a GPU kihasználtságát képes növelni azzal, hogy eliminálja a központi és grafikus processzor közötti kommunikációt. Korábban a processzor több szituációban is korlátozta a GPU-t, mivel minden kernelt a processzor indított a grafikus vezérlőn. Az új funkció lehetőséget ad arra, hogy a program a beágyazott kernelekkel képes legyen tovább dolgozni anélkül, hogy a processzor segítségét venné igénybe. Tulajdonképpen bármelyik kernel képes egy új kernelt indítani anélkül, hogy processzor beavatkozására lenne szükség. Ezt egyelőre csak az Intel Xeon Phi termékek, valamint GK110-es és a GK208-as NVIDIA GPU-k támogatják, de a jövőben alapvető igény lesz, így az érkező hardverek már ennek megfelelően készülnek.

Újítás még az általános címtér megjelenése, ami a programozók dolgát könnyíti majd meg. Segítségével nem szükséges minden egyes névleges címtérhez külön funkciókat írni, ami egyszerűsíti a programozást. Szintén lényeges újítás, hogy a bevezetésre került a C11 atomi és szinkronizációs operációk egy része, aminek hála egy munkaegység feladatai láthatóvá válnak más munkaegységek számára egy munkacsoportban, illetve a többi munkacsoportban, valamint az eszközön belül.

A fenti fontosabb újítások mellett alapvető javításokon is átesett az OpenCL a kép objektumokra vonatkozóan, illetve megjelenik a pipes memóriaobjektum, ami az adatokat FIFO elv szerint raktározza.


[+]

Az OpenCL 2.0 bemutatása mellett elérhetővé vált az OpenCL SPIR 1.2-es verziója. A korábban megjelent SPIR (Standard Portable Intermediate Representation) egy közbülső fordítási egység, ami reprezentálja az OpenCL programot az OpenCL C kernel forrás és a lefordított bináris között. Ez azért fontos, mert az első OpenCL programokat a fejlesztők, vagy lefordított állapotban szállították, vagy a magas szintű forrás binárisa valós időben készült el, viszont a kettő között nem volt semmi más lehetőség, ami azért probléma, mert egyik opció sem ideális.

A SPIR a fenti problémára megoldás, ugyanis ez egy olyan szabványos formátum, ami lényegében a lefordított bináris és a forráskód közötti szinten áll. Az így szállított programokból a gyártók meghajtói az adott virtuális utasításkészletnek megfelelő kódot fordítanak, majd onnan történik a valós utasításkészletnek megfelelő kód fordítása, ahonnan már egyenes út vezet a hardverhez.

A SPIR fontos eleme az LLVM és a harmadik féltől származó fordítók támogatása, ami biztosítja, hogy az OpenCL ökoszisztémája gyorsabban fejlődjön, mivel egyszerűbb lesz az új programnyelvek hozzáadása a rendszerhez. A Khronos Group szerint hosszútávon a C++ támogatása a cél.

Azóta történt

Előzmények

Hirdetés