llenguatge de programació From Wikipedia, the free encyclopedia
Open Computing Language (OpenCL) és un framework per a programes d'escriptura que s'executa mitjançant plataformes heterogènies consistents en unitats centrals de processament (CPU), unitats de procés gràfic (GPUs), processadors de senyals digitals (DSP), FPGAs i altres processadors o acceleradors de hardware.
OpenCL és un estàndard obert i lliure de royalties, per a la programació paral·lela de CPU's, GPU's i altres processadors, 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 de sistemes encastats, passant per aplicacions per al consumidor fins a solucions HPC (acrònim de Computació d'Alt Rendiment, també anomenada supercomputació).
OpenCL consisteix en una API 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 per Apple, que en reté els drets comercials, i adreçat als equips tècnics de AMD, Intel i Nvidia. Apple va sotmetre també aquesta proposta a l'impulsor de l'estàndard gràfic OpenGL, el Grup Khronos.
El 16 de juny del 2008 es va formar el Grup de Treball Khronos Computació amb representants de CPU's, GPU's, sistemes incrustats i companyies de programari i va donar lloc a l'especificació OpenCL 1.0 que després de revisada va ser aprovada el 8 de desembre del 2008.[2]
NVIDIA és el primer fabricant a proporcionar drivers OpenCL per a WindowsXP i Linux[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]
__kernel void vec_add (__global const float *a,
__global const float *b,
__global float *c,
__global int iNombreElements)
{
// obtenir l'índex de la primera dimensió (0) de l{{'}}''id-global''
// que li pertoqui a la ''feina elemental''
int gid0 = get_global_id(0);
// si l'índex supera el darrer element, no cal processar
if (gid0 >= iNombreElements) { return ;}
c[gid0] = a[gid0] + b[gid0];
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.