OpenCL 2.0

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:

A főbb újításokat hardveresen támogató lapkák és a támogatás típusa
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

Hirdetés