Resumen
OpenCL (Open Computing Language) es un marco de trabajo para escribir programas que se ejecutan en plataformas heterogéneas compuestas por unidades centrales de procesamiento (CPU), unidades de procesamiento gráfico (GPU), procesadores de señales digitales (DSP), matrices de puertas programables en campo (FPGA) y otros procesadores o aceleradores de hardware. OpenCL especifica lenguajes de programación (basados en C99, C++14 y C++17) para programar estos dispositivos e interfaces de programación de aplicaciones (API) para controlar la plataforma y ejecutar programas en los dispositivos de cómputo. OpenCL proporciona una interfaz estándar para la computación paralela que utiliza paralelismo basado en tareas y en datos.
OpenCL es un estándar abierto mantenido por el consorcio de tecnología sin fines de lucro Khronos Group. Las implementaciones conformes están disponibles de Altera, AMD, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx y ZiiLABS.
Descripción general
OpenCL considera que un sistema de computación consta de varios dispositivos de cómputo, que pueden ser unidades centrales de procesamiento (CPU) o "aceleradores" como unidades de procesamiento gráfico (GPU), conectados a un procesador anfitrión (una CPU). Define un lenguaje similar a C para escribir programas. Las funciones que se ejecutan en un dispositivo OpenCL se denominan "núcleos". Un solo dispositivo de cómputo suele constar de varias unidades de cómputo, que a su vez comprenden múltiples elementos de procesamiento (PE). Una sola ejecución de un núcleo puede ejecutarse en todos o muchos de los PE en paralelo. La forma en que un dispositivo de cómputo se subdivide en unidades de cómputo y PE depende del proveedor; una unidad de cómputo puede considerarse un "núcleo", pero la noción de núcleo es difícil de definir en todos los tipos de dispositivos compatibles con OpenCL (o incluso dentro de la categoría de "CPU"), y el número de unidades de cómputo puede no corresponder al número de núcleos que se afirma en la literatura de marketing de los proveedores (que en realidad puede estar contando carriles SIMD).
Además de su lenguaje de programación similar a C, OpenCL define una interfaz de programación de aplicaciones (API) que permite que los programas que se ejecutan en el anfitrión inicien núcleos en los dispositivos de cómputo y administren la memoria del dispositivo, que está (al menos conceptualmente) separada de la memoria del anfitrión. Los programas en el lenguaje OpenCL están destinados a compilarse en tiempo de ejecución, de modo que las aplicaciones que usan OpenCL sean portátiles entre implementaciones para varios dispositivos anfitriones. El estándar OpenCL define API de anfitrión para C y C++; existen API de terceros para otros lenguajes de programación y plataformas como Python, Java, Perl, D y .NET.
De Wikipedia (CC BY-SA 4.0).