12 meneos

Artículo de AnandTech sobre OpenCL [traducción en comentarios]

AnandTech explica de forma sencilla qué es OpenCL y por qué es importante. Esencialmente, es una tecnología fácil de usar que permite aprovechar la potencia de cálculo de las tarjetas gráficas y procesadores multinúcleo para ejecutar aplicaciones paralelas. (Traducción en los primeros comentarios).

negativos: 0   usuarios: 11   anónimos: 1  
compartir:  twitter  facebook  tuenti  
  1. #1   Página 1 (Introducción al paralelismo)
    -----------------------------------------------------

    A principios de Diciembre, el Grupo Khronos publicó la especificación de OpenCL. Khronos es un consorcio de empresas de la industria de semiconductores y dispositivos móviles. El grupo está enfocado en crear y administrar estándares para gráficos, multimedia y computación paralela en un gran abanico de productos, desde dispositivos móviles a ordenadores de sobremesa y estaciones de trabajo. Parte de la la labor de Khronos es organizar el estándar OpenGL y todos sus parientes con el prefijo Open-, de modo que la nomenclatura tiene cierto sentido.

    El objetivo de OpenCL es hacer ciertos tipos de programación paralela más sencillos y proveer la habilidad de ejecutar código paralelo de manera portable y acelerada por hardware. Suena complicado, pero simplemente significa que OpenCL dará a los programadores un conjunto común de herramientas fáciles de usar y así aprovechar cualquier dispositivo que tenga un driver de OpenCL (procesadores generales, tarjetas gráficas, etc) para ejecutar código concurrentemente.

    Aunque ya hay herramientas disponibles que permiten procesamiento en paralelo, éstas estan mayormente dirigidas a paralelismo de tareas. El modelo de paralelismo de tareas está formado alrededor de la idea de que el paralelismo se puede extraer construyendo hilos (threads) y dándole a cada uno cierta labor que realizar. Aunque la mayor parte de la programación concurrente está basada en este modelo, hay otras forma de paralelismo que se puede beneficiar enormemente con otro modelo de ejecución.

    En contraste al modelo de paralelismo de tareas, el paralelismo de datos ejecuta el mismo bloque de código sobre cientos (o miles, o millones) de elementos de datos. Mientras que mi videojuego puede tener unos pocos hilos para gestionar la Inteligencia Artificial, simulaciones físicas, audio, estado del juego, visualización y posiblemente otras labores si estoy dispuesto, un programa con paralelismo de datos para hacer algo como procesamiento de imágenes puede lanzar millones de hilos, uno para cada pixel de la imagen. De modo en que estos hilos están agrupados y organizados dependerá tanto de la forma en que haya escrito el programa como el hardware en el que se esté ejecutando este programa.

    Como hemos dicho muchas veces en el pasado, los algoritmos gráficos son casi infinitamente paralelizables. Los millones de píxeles en la pantalla pueden todos actuar   » ver todo el comentario
    40  votos: 4   link
    el 03-01-2009 15:11 UTC por --29106-- --29106--
  2. #2   Página 2 (Motivación para crear OpenCL)
    ----------------------------------------------------------
    ¿Por qué es difícil la computación en paralelo?

    Hay multitud de problemas con la computación en paralelo. Dividir el problema en pedazos es generalmente el paso más importante y más difícil, sobre todo cuando el paralelismo no es evidente. Como estamos enraizados en un mundo de programación secuencial, llevar a cabo la división de un algoritmo en tareas que se puedan ejecutar concurrentemente es difícil. Puede no sólo requerir reorganizar el código, sino incluso rediseñar completamente la forma en la que resolvemos un problema.

    Incluso en problemas que son fácilmente paralelizables, explotar el paralelismo puede ser complejo. Incluso cuando conoces el mejor y más rápido algoritmo para resolver cierto problema en paralelo, no es siempre fácil convertirlo en un programa eficiente. Por ejemplo, si quiero multiplicar dos matrices de 100.000x100.000 elementos, no puedo simplemente lanzar todos los hilos que serían necesarios. Si estuviese usando hilos POSIX para calcular un elemento de la matríz resultante con cada uno, invertiría más tiempo creando los hilos y racionando los recursos que realmente haciendo el cómputo en sí. Tengo que tomar los recursos de los que dispongo y usarlos de la mejor manera posible. Aunque sé cómo resolver en paralelo un producto matricial, tengo que ser cuidadoso a la hora de dividir el problema y no puedo aprovechar todo el paralelismo posible debido a las herramientas de las que dispongo (hilos POSIX en este caso).

    También estamos limitados en recursos hardware. Con sólo un puñado de núcleos disponibles en nuestra CPU, incluso si no hubiese ninguna sobrecarga software, no podríamos acelerar la ejecución más allá del número de núcleos de los que disponemos. Esto no sólo significa que no podemos beneficiarnos de tareas masivamente paralelas, sino que además desanima a los programadores a hacer el esfuerzo de expresar sus algoritmos de forma paralela.

    ¿Cómo ayuda OpenCL?

    ¿Qué pasaría si no sólo tuviésemos a nuestra disposición cientos de recursos hardware capaces de ejecutar miles de hilos concurrentemente sin ningún coste adicional? De hecho ya lo tenemos: se llama una tarjeta gráfica.

    La manera en que realizas cómputos en OpenCL es escribiendo tu algoritmo en una función especial, llamada un kernel, que se puede ejecutar millones de veces sobre diferentes conjuntos de datos sin necesidad de administrar los hilos tú mismo. Lo único que tienes que hacer es indicar el número de elementos que deseas computar y el driver se ocupará de decidir la mejor forma de aprovechar la tarjeta gráfica o las CPUs disponibles en tu ordenador.
    40  votos: 4   link
    el 03-01-2009 15:12 UTC por --29106-- --29106--
  3. #3   ¿pero sirve para hackear la wifi del vecino o no? xD
    6  votos: 0   link
    el 03-01-2009 15:14 UTC por DiCrEn DiCrEn
  4. #4   Algunas preguntas frecuentes con respuestas. Si tienes alguna duda, pregunta y trataré de responder en los comentarios.

    1- ¿En qué se diferencia OpenCL de CUDA?

    OpenCL es un estándar abierto respaldado por las mayores empresas del sector, incluyendo AMD, Apple, IBM, Intel y Nvidia. CUDA es una tecnología propietaria de Nvidia.

    2- ¿Tiene algo que ver con OpenGL?

    Está relacionado con OpenGL en tanto que el Grupo Khronos es responsable de definir ambos estándares. OpenGL es una API para acelerar la visualización de contenidos 3D, tales como juegos y programas de CAD. OpenCL permite ejecutar algoritmos paralelos usando tanto la CPU como la GPU (tarjeta gráfica).

    3- ¿Es OpenCL software libre?

    OpenCL es una especificación, igual que OpenGL. Varios fabricantes de microprocesadores y tarjetas gráficas están trabajando en implementaciones (es decir, drivers) que se ajustan a este estándar. No tengo noticia de ninguna implementación que sea software libre.

    4- ¿Tiene algo que ver con Apple?

    Sí. Apple propuso al Grupo Khronos un boceto de OpenCL en Junio de 2008 para mejorarlo y estandarizarlo. De acuerdo a las noticias de prensa de Apple, OpenCL es un elemento fundamental de la próxima versión de OS X, Snow Leopard.

    5- ¿En qué se diferencia usar OpenCL de programar usando hilos, OpenMP o MPI?

    Programar gestionando hilos a mano es complejo, es fácil cometer errores, y no aprovecha ese gran procesador que tienen muchos ordenadores: la tarjeta gráfica.

    OpenMP simplifica mucho la gestión de los hilos, pero tampoco permite hacer uso de la tarjeta gráfica.

    MPI se basa en un paradigma de paso de mensajes mientras que OpenCL permite básicamente lanzar tareas, unidas entre sí por un grafo de dependencias explícito. Cada una de estas tareas típicamente expresa paralelismo de datos y se ejecuta en un gran número de hilos. El programador puede elegir si desea ejecutar cada tarea en la CPU o en la CPU (de momento no hay balanceo de carga automático).
    12  votos: 1   link
    el 03-01-2009 15:28 UTC por --29106-- --29106--
  5. #5   #3 No sé de ninguna implementación, pero suena a un buen proyecto :-)

    Creo que pasará al menos un año hasta que la gente empiece a dar con usos innovadores para OpenCL. De momento quienes parecen más interesados son la gente que trabaja en supercomputación, especialmente basada en procesadores Cell, porque son complicados de programar a mano y se ajustan muy bien al modelo de OpenCL.
    12  votos: 1   link
    el 03-01-2009 15:31 UTC por --29106-- --29106--
comentarios cerrados

menéame