- OpenCL
-
OpenCL Desarrollador Grupo Khronos
http://www.khronos.org/openclInformación general Diseñador Apple Última versión estable 1.1
11 de junio de 2010Género Interfaz de programación de aplicaciones, GPGPU Sistema operativo Multiplataforma Licencia Libre de derechos En español ? 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.[1]
Apple creó la especificación original y 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[2] para llevar a cabo el proceso de estandarización.
OpenCL forma parte de Mac OS X v10.6 ('Snow Leopard').[3] AMD ha decidido apoyar OpenCL en lugar de su antigua API Close to Metal. [4] [5]
Contenido
Ejemplo
Este ejemplo calcula una Transformada rápida de Fourier.[1] 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 éste:
// 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
- GPGPU
- CUDA
- Close to Metal
- BrookGPU
- Lib Sh
- Larrabee (GPU)
Referencias
- ↑ a b «OpenCL». SIGGRAPH2008 (14 de agosto de 2008). Consultado el 14 de agosto de 2008.
- ↑ «Khronos Launches Heterogeneous Computing Initiative». Khronos Group (16-06-2008). Consultado el 18-06-2008.
- ↑ «Apple Previews Mac OS X Snow Leopard to Developers». Apple (09-06-2008). Consultado el 09-06-2008.
- ↑ «AMD Drives Adoption of Industry Standards in GPGPU Software Development». AMD (06-08-2008). Consultado el 14-08-2008.
- ↑ «AMD Backs OpenCL, Microsoft DirectX 11». eWeek (06-08-2008). Consultado el 14-08-2008.
Enlaces externos
- Sitio web oficial de OpenCL
- OpenCL: What you need to know - artículo publicado en Macworld, agosto del 2008
Categorías:- OpenGL
- Acrónimos de informática
Wikimedia foundation. 2010.