| No s'ha de confondre ambOpenGL. |

Open Computing Language (OpenCL) és unframework per a programes d'escriptura que s'executa mitjançant plataformesheterogènies consistents enunitats centrals de processament (CPU),unitats de procés gràfic (GPUs),processadors de senyals digitals (DSP),FPGAs i altres processadors oacceleradors de hardware.
OpenCL és un estàndard obert i lliure deroyalties, per a la programació paral·lela deCPU's,GPU's i altresprocessadors, a fi i efecte de proporcionar als desenvolupadors l'accés portable i eficient a la potència d'aquestes plataformes de procés heterogènies.[1]
OpenCL admet una extensa gamma d'aplicacions, des desistemes encastats, passant per aplicacions per al consumidor fins a solucions HPC (acrònim de Computació d'Alt Rendiment, també anomenadasupercomputació).
OpenCL consisteix en unaAPI per coordinar la computació paral·lela entre processadors heterogenis, i a més un llenguatge multiplataforma i una especificació de l'entorn de computació.
OpenCL va ser concebut inicialment perApple, que en reté els drets comercials, i adreçat als equips tècnics deAMD,Intel iNvidia. Apple va sotmetre també aquesta proposta a l'impulsor de l'estàndard gràficOpenGL, elGrup Khronos.
El 16 de juny del2008 es va formar el Grup de Treball Khronos Computació amb representants de CPU's, GPU's, sistemes incrustats i companyies deprogramari i va donar lloc a l'especificació OpenCL 1.0 que després de revisada va ser aprovada el8 de desembre del2008.[2]
NVIDIA és el primer fabricant a proporcionar drivers OpenCL per aWindowsXP iLinux[3][4]
Publicació de l'edició OpenCL 1.1[5]
Visualització figurativa:
#define nucli_suma_vectors(A,B,C,N) { \ \ i = j + id_del_processador; \ // el ''id'' del primer processador és 0 if (i < N) { \ C[i] = A[i] + B[i]; \ } \}
- si només hi ha un processador, executarem seqüencialment N vegades el nucli.
for (j = 0; j < N; j++) p0.nucli_suma_vectors(A,B,C,N) ;
- si en tenim un grapat, el sistema enviarà el nucli a cadascun dels processadors, requerint-ne l'execució(N / # processadors) vegades. A la darrera alguns processadors obtindran índexs superiors a N i és per això que hi ha la guarda.
for (j = 0; j < N; j += nombre_processadors) { || p0.nucli_suma_vectors(A,B,C,N); || p1.nucli_suma_vectors(A,B,C,N); ... || pM.nucli_suma_vectors(A,B,C,N); }
Vegeu l'#Exemple de nucli.
Nucli per obtenir la Suma de vectors d'1 dimensió. Vegeu exemple a[6]
__kernelvoidvec_add(__globalconstfloat*a,__globalconstfloat*b,__globalfloat*c,__globalintiNombreElements){// obtenir l'índex de la primera dimensió (0) de l{{'}}''id-global''// que li pertoqui a la ''feina elemental''intgid0=get_global_id(0);// si l'índex supera el darrer element, no cal processarif(gid0>=iNombreElements){return;}c[gid0]=a[gid0]+b[gid0];}