OpenCL

OpenCL
OpenCL
Desarrollador
Grupo Khronos
http://www.khronos.org/opencl
Información general
Diseñador Apple
Última versión estable 1.1
11 de junio de 2010; hace 1 año (2010-06-11)
Gé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

Referencias

  1. a b «OpenCL». SIGGRAPH2008 (14 de agosto de 2008). Consultado el 14 de agosto de 2008.
  2. «Khronos Launches Heterogeneous Computing Initiative». Khronos Group (16-06-2008). Consultado el 18-06-2008.
  3. «Apple Previews Mac OS X Snow Leopard to Developers». Apple (09-06-2008). Consultado el 09-06-2008.
  4. «AMD Drives Adoption of Industry Standards in GPGPU Software Development». AMD (06-08-2008). Consultado el 14-08-2008.
  5. «AMD Backs OpenCL, Microsoft DirectX 11». eWeek (06-08-2008). Consultado el 14-08-2008.

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Mira otros diccionarios:

  • OpenCL — Entwickler Khronos Group Aktuelle Version 1.2 (16. November 2011) Betriebssystem plattformunabhängig Kategorie Programmierschnittstelle …   Deutsch Wikipedia

  • OpenCL — Тип API Разработчик Apple Inc., Khronos Group Операционная система Кроссплатформенное программное обеспечение Первый выпуск 9 декабря 2008 Последняя версия 1.2 (15 ноября 2011) Лицензия …   Википедия

  • OpenCL C — OpenCL Entwickler: Khronos Group Aktuelle Version: 1.0 (8. Dezember 2008) Betriebssystem: plattformunabhängig Kateg …   Deutsch Wikipedia

  • OpenCL — This article is about the parallel computing library. For the cryptographic library formerly named OpenCL, see Botan (programming library). OpenCL Original author(s) Apple Inc. Developer(s) Khronos Group …   Wikipedia

  • OpenCL —  Ne doit pas être confondu avec OpenGL. OpenCL (Open Computing Language) est la combinaison d une API et d un langage de programmation dérivé du C, proposé comme un standard ouvert par le Khronos Group. OpenCL est conçu pour programmer des… …   Wikipédia en Français

  • Open CL — OpenCL  Ne doit pas être confondu avec OpenGL. OpenCL (Open Computing Language) est la combinaison d une API et d un langage de programmation dérivé du C, proposé comme un standard ouvert par le Khronos Group. L objectif d OpenCL est de… …   Wikipédia en Français

  • Bullet Physics Library — Физический движок …   Википедия

  • Mac OS X Snow Leopard — Mac OS X v10.6 Snow Leopard Part of the Mac OS X family …   Wikipedia

  • Compute Unified Device Architecture — Entwickler Nvidia Aktuelle Version 4.0 (Mai 2011) Betriebssystem Windows, Linux, MacOS X Kategorie …   Deutsch Wikipedia

  • AMD Fusion — Codename(s) Fusion Desna Ontario Zacate Llano Hondo (cancelled) Wichita (cancelled) Krishna (cancelled) Trinity Weatherford Richland IGP Wrestler WinterPark BeaverCreek ATI/Radeon Driver related BTC[1] [2] …   Wikipedia

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”