Az OpenCL egy Apple által megálmodott és a Khronos Group vezetésével fejlesztett felület, mely nyílt ipari szabványnak tekinthető, és a gyártók széles körben támogatják. A koncepció alapját az eredeti OpenCL-t vizsgáló tudástárunkban leírtuk, így ez a bejegyzés a 2.0-s verzió igen jelentős módosításaira koncentrál.
Hirdetés
Az OpenCL 2.0 a mély integrációhoz készült. Bár maga a felület üzemképes dedikált gyorsítóval vagy grafikus vezérlővel is, de a főbb funkciói ilyenkor csak emulálva működnek.
Az OpenCL 2.0 az alábbi képességeket kínálja:
Egységes virtuális memória: Ez az újítás egységesen támogatja a központi processzorok és az integrált grafikus vezérlő között megosztott virtuális memóriát, így az előbbi két részegység logikai szinten vagy valós formában mellőzheti a memóriamásolásokat, illetve ezek eliminálásával hatékonyabb algoritmusok hozhatók létre és a heterogén módon programozható hardverek használata is egyszerűbb lesz. A hardveres támogatáshoz mély integrációt használó lapka szükséges. Az OpenCL 2.0 két módot kínál: CGB (Coarse Grain Buffer) és FGB (Fine Grain Buffer). Előbbi csak emulált formában teremti meg az egységes virtuális memóriát, tehát az adatmásolások fizikailag nem szűnnek meg, de a programozónak egyszerűbb lesz dolga. Az utóbbi már már tényleg teljesen mellőzi a memóriamásolásokat, viszont ez opcionális funkció, tehát nem kötelező támogatni.
Beágyazott parallelizmus: A nested vagy dynamic parallelism néven emlegetett megoldás a grafikus vezérlő 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. A hardveres támogatáshoz megfelelő parancsprocesszorra van szükség az integrált vagy dedikált grafikus vezérlőben.
Platformszintű atomi operációk: Ennek a funkciónak köszönhetően 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 hardveres támogatáshoz mély integrációt használó lapka szükséges. Ilyenkor az egyes részegységek párhuzamosan is írhatnak ki adatokat a memóriába, vagy éppen olvashatnak onnan. Ez a funkció opcionális, tehát nem kötelező támogatni.
Pipes memóriaobjektum: Ez az adatokat FIFO elv szerint raktározza, emellett az OpenCL felület beépített funkciókat kínál, hogy a kernelek írhassanak a pipe-ba, vagy olvashassanak belőle. Ez lehetővé teszi a pipe adatstruktúrák egyszerű és hatékony programozását. A hardveres támogatáshoz az egységes virtuális memória és a beágyazott parallelizmus hardveres támogatása szükséges.
Az elérhető, mély integrációt kínáló hardverek szempontjából csupán két lapka támogatja úgy az OpenCL 2.0-t, hogy a fontos funkciók közül legalább valamelyiket kezeli hardveresen. Erről a támogatásról az alábbi táblázat bővebb felvilágosítást ad:
Gyártó | AMD |
Intel |
---|---|---|
Lapka kódneve |
Kaveri |
Broadwell |
Egységes virtuális memória | CGB és FGB mód |
CGB és FGB mód |
Beágyazott parallelizmus |
hardveres |
hardveres |
Pipes memóriaobjektum | hardveres | hardveres |
Platformszintű atomi operációk (opcionális) | hardveres | emulált |