Az OpenCL programozási nyelv

Kapcsolat az OpenGL-lel

Az OpenCL-t napjainkban már számos GPU, és x86 processzor támogatja. Mivel a videókártya az egyik legelterjedtebb végrehajtási platformja az OpenCL programoknak, ezért természetes igény, hogy a szabvány együttműködést biztosítson a különböző grafikus API-kal. Támogajta mind az DirectX mind az OpenGL-lel való együtműködést. Azonban ez utóbbi, mivel a két szabványt fejlesztő szervezet ugyanaz, nagyobb támogatást élvez a szabvány részéről.

Az együttműködés során az optimálisabb működés érdekében közös memóriaterületek használatára van lehetőség, illetve a két API működésének szinkronizációjára is lehetőség van.

A következő erőforrások megosztására van lehetőségünk:

Az együttműködés biztosításához az OpenCL kontextust egy már inicializált OpenGL kontextus segítségével kell létrehozni. Ezt a inicializálás során megfelően beállított paraméterek segítségével tehetjük meg. Például Windows operációs rendszer alatt a következő módon:

cl_context_properties props[] = { CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(), CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(), CL_CONTEXT_PLATFORM, (cl_context_properties)platforms[platformID], 0 }; clContext = clCreateContext(props,deviceCount,devices,NULL,NULL,&errCode) ;

Az OpenCL-nek jeleznie kell igényét, illetve lemondását a közös erőforrásokról a clEnqueueAcquireGLObjects, clEnqueueReleaseGLObjects függvények segítségével.

Ezek a megosztási lehetőségek implementációtól függően rendelkezésre állhatnak x86 architektúrákon is. Mind az AMD, mind az Intel támogatja ezt a lehetőséget. Azonban ennek használata esetén számolni kell a memória műveletek miatt fellépő teljesítmény csökennéssel. Ez a negatívum azonban már valószínűleg nem jelentkezik az idén bevezett új generációs processzor archiktúrák esetén, mivel az egy szilicum lapkára integrált grafikus és x86 magok közös memóriával, sőt gyorsítótárral rendelkeznek.