fbpx
Wikipedia

OpenCL

OpenCL (Open Computing Language, en español lenguaje de computación abierto) consta de una interfaz de programación de aplicaciones y de un lenguaje de programación. Juntos permiten crear aplicaciones con paralelismo a nivel de datos y de tareas que pueden ejecutarse tanto en unidades centrales de procesamiento como unidades de procesamiento gráfico. El lenguaje está basado en C99, eliminando cierta funcionalidad y extendiéndolo con operaciones vectoriales.[2]

OpenCL
Parte de Computación heterogénea
Información general
Tipo de programa Interfaz de programación de aplicaciones, GPGPU
Autor Apple
Desarrollador Grupo Khronos
Lanzamiento inicial 28 de agosto de 2009
Licencia Libre de derechos
Información técnica
Programado en
Plataformas admitidas
Versiones
Última versión estable 3.0[1]​ (info) 27 de abril de 2020 (1 año, 3 meses y 22 días)[1]
Enlaces
Sitio web oficial

Apple creó la especificación original y fue desarrollada en conjunto con AMD, IBM, Intel y NVIDIA. Apple la propuso al Grupo Khronos para convertirla en un estándar abierto y libre de derechos. El 16 de junio de 2008 Khronos creó el Compute Working Group[3]​ para llevar a cabo el proceso de estandarización. En 2013 se publicó la versión 2.0 del estándar.

OpenCL forma parte de Mac OS X v10.6 ('Snow Leopard'),[4]​ mientras que AMD decidió apoyar OpenCL en lugar de su antigua API Close to Metal. [5][6]​ Intel también dispone de su propio entorno de desarrollo y NVIDIA además de tener su propia API para chips gráficos llamada CUDA, también admite OpenCL.

Ejemplo

Este ejemplo calcula una Transformada rápida de Fourier.[2]​ Las llamadas a la API son las siguientes:

// create a compute context with GPU device context = clCreateContextFromType(CL_DEVICE_TYPE_GPU); // create a work-queue queue = clCreateWorkQueue(context, NULL, NULL, 0); // allocate the buffer memory objects memobjs[0] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float)*2*num_entries, srcA); memobjs[1] = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(float)*2*num_entries, NULL); // create the compute program program = clCreateProgramFromSource(context, 1, &fft1D_1024_kernel_src, NULL); // build the compute program executable clBuildProgramExecutable(program, false, NULL, NULL); // create the compute kernel kernel = clCreateKernel(program, fft1D_1024); // create N-D range object with work-item dimensions global_work_size[0] = n; local_work_size[0] = 64; range = clCreateNDRangeContainer(context, 0, 1, global_work_size, local_work_size); // set the args values clSetKernelArg(kernel, 0, (void *)&memobjs[0], sizeof(cl_mem), NULL); clSetKernelArg(kernel, 1, (void *)&memobjs[1], sizeof(cl_mem), NULL); clSetKernelArg(kernel, 2, NULL, sizeof(float)*(local_work_size[0]+1)*16, NULL); clSetKernelArg(kernel, 3, NULL, sizeof(float)*(local_work_size[0]+1)*16, NULL); // execute kernel clExecuteKernel(queue, kernel, NULL, range, NULL, 0, NULL); 

El cómputo en sí es este:

// This kernel computes FFT of length 1024. The 1024 length FFT is decomposed into  // calls to a radix 16 function, another radix 16 function and then a radix 4 function  __kernel void fft1D_1024 (__global float2 *in, __global float2 *out,   __local float *sMemx, __local float *sMemy) { int tid = get_local_id(0); int blockIdx = get_group_id(0) * 1024 + tid; float2 data[16]; // starting index of data to/from global memory  in = in + blockIdx; out = out + blockIdx; globalLoads(data, in, 64); // coalesced global reads  fftRadix16Pass(data); // in-place radix-16 pass  twiddleFactorMul(data, tid, 1024, 0); // local shuffle using local memory  localShuffle(data, sMemx, sMemy, tid, (((tid & 15) * 65) + (tid >> 4))); fftRadix16Pass(data);  // in-place radix-16 pass  twiddleFactorMul(data, tid, 64, 4); // twiddle factor multiplication  localShuffle(data, sMemx, sMemy, tid, (((tid >> 4) * 64) + (tid & 15))); // four radix-4 function calls  fftRadix4Pass(data); fftRadix4Pass(data + 4); fftRadix4Pass(data + 8); fftRadix4Pass(data + 12); // coalesced global writes  globalStores(data, out, 64); } 

Véase también

Referencias

  1. Khronos Releases OpenCL 3.0
  2. «OpenCL». SIGGRAPH2008. 14 de agosto de 2008. Archivado desde el original el 19 de marzo de 2012. Consultado el 14 de agosto de 2008. 
  3. . Khronos Group. 16 de junio de 2008. Archivado desde el original el 20 de junio de 2008. Consultado el 18 de junio de 2008. 
  4. . Apple. 9 de junio de 2008. Archivado desde el original el 11 de junio de 2008. Consultado el 9 de junio de 2008. 
  5. . AMD. 6 de agosto de 2008. Archivado desde el original el 16 de septiembre de 2008. Consultado el 14 de agosto de 2008. 
  6. «AMD Backs OpenCL, Microsoft DirectX 11». eWeek. 6 de agosto de 2008. Consultado el 14 de agosto de 2008. 

Enlaces externos

  • Sitio web oficial de OpenCL
  •   Datos: Q681360
  •   Multimedia: Category:OpenCL

opencl, debe, confundirse, opengl, open, computing, language, español, lenguaje, computación, abierto, consta, interfaz, programación, aplicaciones, lenguaje, programación, juntos, permiten, crear, aplicaciones, paralelismo, nivel, datos, tareas, pueden, ejecu. No debe confundirse con OpenGL OpenCL Open Computing Language en espanol lenguaje de computacion abierto consta de una interfaz de programacion de aplicaciones y de un lenguaje de programacion Juntos permiten crear aplicaciones con paralelismo a nivel de datos y de tareas que pueden ejecutarse tanto en unidades centrales de procesamiento como unidades de procesamiento grafico El lenguaje esta basado en C99 eliminando cierta funcionalidad y extendiendolo con operaciones vectoriales 2 OpenCLParte de Computacion heterogeneaInformacion generalTipo de programaInterfaz de programacion de aplicaciones GPGPUAutorAppleDesarrolladorGrupo KhronosLanzamiento inicial28 de agosto de 2009LicenciaLibre de derechosInformacion tecnicaProgramado enCC Plataformas admitidasx86 64IA 32ARMVersionesUltima version estable3 0 1 info 27 de abril de 2020 1 ano 3 meses y 22 dias 1 EnlacesSitio web oficial editar datos en Wikidata Apple creo la especificacion original y fue desarrollada en conjunto con AMD IBM Intel y NVIDIA Apple la propuso al Grupo Khronos para convertirla en un estandar abierto y libre de derechos El 16 de junio de 2008 Khronos creo el Compute Working Group 3 para llevar a cabo el proceso de estandarizacion En 2013 se publico la version 2 0 del estandar OpenCL forma parte de Mac OS X v10 6 Snow Leopard 4 mientras que AMD decidio apoyar OpenCL en lugar de su antigua API Close to Metal 5 6 Intel tambien dispone de su propio entorno de desarrollo y NVIDIA ademas de tener su propia API para chips graficos llamada CUDA tambien admite OpenCL Indice 1 Ejemplo 2 Vease tambien 3 Referencias 4 Enlaces externosEjemplo EditarEste ejemplo calcula una Transformada rapida de Fourier 2 Las llamadas a la API son las siguientes create a compute context with GPU device context clCreateContextFromType CL DEVICE TYPE GPU create a work queue queue clCreateWorkQueue context NULL NULL 0 allocate the buffer memory objects memobjs 0 clCreateBuffer context CL MEM READ ONLY CL MEM COPY HOST PTR sizeof float 2 num entries srcA memobjs 1 clCreateBuffer context CL MEM READ WRITE sizeof float 2 num entries NULL create the compute program program clCreateProgramFromSource context 1 amp fft1D 1024 kernel src NULL build the compute program executable clBuildProgramExecutable program false NULL NULL create the compute kernel kernel clCreateKernel program fft1D 1024 create N D range object with work item dimensions global work size 0 n local work size 0 64 range clCreateNDRangeContainer context 0 1 global work size local work size set the args values clSetKernelArg kernel 0 void amp memobjs 0 sizeof cl mem NULL clSetKernelArg kernel 1 void amp memobjs 1 sizeof cl mem NULL clSetKernelArg kernel 2 NULL sizeof float local work size 0 1 16 NULL clSetKernelArg kernel 3 NULL sizeof float local work size 0 1 16 NULL execute kernel clExecuteKernel queue kernel NULL range NULL 0 NULL El computo en si es este This kernel computes FFT of length 1024 The 1024 length FFT is decomposed into calls to a radix 16 function another radix 16 function and then a radix 4 function kernel void fft1D 1024 global float2 in global float2 out local float sMemx local float sMemy int tid get local id 0 int blockIdx get group id 0 1024 tid float2 data 16 starting index of data to from global memory in in blockIdx out out blockIdx globalLoads data in 64 coalesced global reads fftRadix16Pass data in place radix 16 pass twiddleFactorMul data tid 1024 0 local shuffle using local memory localShuffle data sMemx sMemy tid tid amp 15 65 tid gt gt 4 fftRadix16Pass data in place radix 16 pass twiddleFactorMul data tid 64 4 twiddle factor multiplication localShuffle data sMemx sMemy tid tid gt gt 4 64 tid amp 15 four radix 4 function calls fftRadix4Pass data fftRadix4Pass data 4 fftRadix4Pass data 8 fftRadix4Pass data 12 coalesced global writes globalStores data out 64 Vease tambien EditarGPGPU CUDA Close to Metal BrookGPU Lib Sh Larrabee GPU Referencias Editar a b Khronos Releases OpenCL 3 0 a b OpenCL SIGGRAPH2008 14 de agosto de 2008 Archivado desde el original el 19 de marzo de 2012 Consultado el 14 de agosto de 2008 Khronos Launches Heterogeneous Computing Initiative Khronos Group 16 de junio de 2008 Archivado desde el original el 20 de junio de 2008 Consultado el 18 de junio de 2008 Apple Previews Mac OS X Snow Leopard to Developers Apple 9 de junio de 2008 Archivado desde el original el 11 de junio de 2008 Consultado el 9 de junio de 2008 AMD Drives Adoption of Industry Standards in GPGPU Software Development AMD 6 de agosto de 2008 Archivado desde el original el 16 de septiembre de 2008 Consultado el 14 de agosto de 2008 AMD Backs OpenCL Microsoft DirectX 11 eWeek 6 de agosto de 2008 Consultado el 14 de agosto de 2008 Enlaces externos EditarSitio web oficial de OpenCL Datos Q681360 Multimedia Category OpenCLObtenido de https es wikipedia org w index php title OpenCL amp oldid 134745956, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos