Movatterモバイル変換


[0]ホーム

URL:


Vés al contingut
Viquipèdial'Enciclopèdia Lliure
Cerca

OpenCL

De la Viquipèdia, l'enciclopèdia lliure
No s'ha de confondre ambOpenGL.
Cada invocació (work-item) del nucli pren una fila de la matriu verda (A al codi), multiplica aquesta fila amb el vector vermell (x) i col·loca el resultat en una entrada del vector blau (y). El nombre de columnesn es passa al nucli com ancols; el nombre de files està implícit en el nombre d'elements de treball produïts pel programa amfitrió.

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ó.

  • Suporta ambdós models de programació paral·lela, el basat en dades i el basat en tasques.
  • Utilitza un subconjunt delllenguatge C en la versió del1999C99 amb extensions per al paral·lelisme.
  • Defineix requeriments numèrics basats en l'estàndardIEEE 754.
  • Defineix un perfil de configuració per a dispositius de mà (PDA,..) isistemes encastats.
  • Interacciona eficientment ambAPI's gràfiques comOpenGL,OpenGL ES i altres.

Història

[modifica]

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]

Terminologia de l'arquitectura

[modifica]
Nucli (kernel)
Per paral·lelitzar una iteració, se'n pren el nucli, se l'enclou en una funció de les estructures (vectors o matrius) i variables que hi intervenen, i s'hi afegeix l'obtenció de l'índex que la GPU assigni al processador elemental on s'executin.
Dit d'altra manera: Procés o operació sobre elements individuals de les estructures dels operands, equivalent al nucli d'una iteració, que s'executarà en paral·lel per a cadascun dels elements als múltiplesProcessadors elementals de la GPU.

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.

model de plataforma

[modifica]
host
ord. amfitrió, conté 1 o més Dispositius OpenCL
dispositiu OpenCL (Compute device)
conté una o més Unitats de computació. Té accés a unamemòria global.
unitat de computació (Compute unit)
conté un o mésprocessadors elementals. Disposa d'unamemòria local compartida entre els P.E. de la unitat. Pot processar unafeina-agrupada.
processador elemental (Process element)
processafeines elementals. Disposa d'unamemòria privada per a les variables locals de la funciónucli.

model d'execució

[modifica]
objectes de programa
dades en memòria que contenen la funciónucli en codi font, compilat al vol (ang:just-in-time) o precompilat.
objectes de memòria N-dimensionals
operands de la funció nucli que poden ser tractats com a vector, matriu o estructura N-dimensional.
Rang N-dimensional (NDRange)
espai N-dimensional dels índexs a les estructures dels operands.
Identificador global (global-id)
N-tupla d'índexs que identifica els elements individuals (en les estructures N-dimensionals dels operands) que intervenen en una computació (feina elemental)
feina elemental (work-item)
una instància de les execucions de la funciónucli en unprocessador elemental, sobre els elements resultants d'indexar els operands amb unidentificador global.
feina agrupada (work-group)
conjunt defeines elementals que s'executen dins una mateixaunitat de computació i comparteixen unamemòria local. Les feines elementals s'hi caracteritzen per unidentificador de grup i unidentificador local.

Exemple de nucli

[modifica]

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];}

Eines per detectar suport OpenCL

[modifica]

API's multiplataforma

[modifica]

Biblioteques per a altres llenguatges

[modifica]
aJava
  • JavaCL[11]
  • Aparapi[12] Biblio. de AMD d'interfície OpenCL per al lleng.Java
aScala
  • ScalaCL[13] Paquet amb optimització sobre estructuresad hoc ScalaCLCollections
  • ScalaCLPlugin[14] Optimitza codi normal per a l'execució a la GPU
aHaskell
  • OpenCLRaw: Ref.[15] Cal modificar-ne les dependències dels paquets.
  • Accelerate: llenguatgeDSL (Domain Specific Language: específic per al camp d'aplicació) que compila directament codi Haskell a nuclis de GPU (de moment amb rerefonsCPU iCUDA).[16]
aRuby
  • Ruby-opencl: Ref.[17]

Biblioteques optimitzades amb OpenCL

[modifica]
  • ImageMagick[18]
  • Codificador x264. Paralel·lització amb OpenCL de la Univ. deHeidelberg.[19]

OpenCL sobreCPU (noGPU)

[modifica]
  • AMD SDK segons la ref.[20]

Referències

[modifica]
  1. «Khronos OpenCL Registry - The Khronos Group Inc».[Consulta: 20 desembre 2023].
  2. «The Khronos Group Releases OpenCL 1.0 Specification». Khronos Group,08-12-2008. Arxivat de l'original el 2010-07-13.[Consulta: 10 gener 2009].
  3. HPC-Wire - Nvidia llança drivers OpenCL per a WindowsXP i LinuxArxivat 2009-06-29 aWayback Machine.(anglès)
  4. «The Khronos Group»(en anglès),20-12-2023.[Consulta: 20 desembre 2023].
  5. Publicació de l'edició OpenCL 1.1Arxivat 2010-10-23 aWayback Machine.(anglès)
  6. «Jülich Supercomputing Centre (JSC)».[Consulta: 20 desembre 2023].
  7. TechPowerUp GPU-Z
  8. «Tech Advisor - Inicio»(en castellà).[Consulta: 20 desembre 2023].
  9. «GPU Caps Viewer: Graphics card and GPU information utility, OpenGL, OpenCL and CUDA API support, NVIDIA GeForce, ATI Radeon | oZone3D.Net».[Consulta: 20 desembre 2023].
  10. Using OpenCL with QtArxivat 2010-10-15 aWayback Machine.(anglès)
  11. JavaCL[Enllaç no actiu](anglès)
  12. AMD AparapiArxivat 2011-08-04 aWayback Machine.(anglès)
  13. ScalaCL[Enllaç no actiu](anglès)
  14. ScalaCLPlugin[Enllaç no actiu]
  15. «OpenCLRaw».[Consulta: 20 desembre 2023].
  16. PaquetAccelerate del llenguatge Haskell sobre CUDA
  17. Ruby-OpenCLArxivat 2012-11-04 aWayback Machine.(anglès)
  18. LLC, ImageMagick Studio.«ImageMagick»(en anglès).[Consulta: 20 desembre 2023].
  19. Parallelization of the x264 encoder using OpenCL(anglès)
  20. «Andrew Cooke: C[ompute]».[Consulta: 20 desembre 2023].

Enllaços externs

[modifica]
  • Vegeu aquesta plantilla
Assembly ·Bash ·BASIC ·C ·C++ ·C# ·COBOL ·Haskell ·Idris ·Fortran ·Java ·JavaScript (JS) ·Lisp ·Pascal ·Perl ·PHP ·Prolog ·Python ·PureScript ·Ruby ·Scheme ·Smalltalk ·Visual Basic
Obtingut de «https://ca.wikipedia.org/w/index.php?title=OpenCL&oldid=33027695»
Categoria:
Categories ocultes:

[8]ページ先頭

©2009-2026 Movatter.jp