2011-03-06 14 views
18

Estoy interesado en desarrollarme con alguna nueva tecnología y estaba pensando en probar CUDA. Ahora ... su documentación es demasiado técnica y no proporciona las respuestas que estoy buscando. Además, me gustaría escuchar las respuestas de personas que ya tienen experiencia con CUDA.¿Cómo es CUDA? ¿Para qué sirve? ¿Cuales son los beneficios? ¿Y cómo comenzar?

Básicamente mis preguntas son las que en el título:

¿Qué es exactamente CUDA? (¿Es un marco? ¿O una API? ¿Qué?)

¿Para qué sirve? (¿hay algo más que solo programación en la GPU?)

¿Cómo es?

¿Cuáles son los beneficios de la programación contra CUDA en lugar de la programación de la CPU?

¿Cuál es un buen lugar para comenzar a programar con CUDA?

Respuesta

22

CUDA reúne varias cosas:

  • hardware masiva en paralelo diseñado para ejecutar código genérico (no gráfica), con controladores adecuados para hacerlo.
  • Un lenguaje de programación basado en C para programar dicho hardware y un lenguaje ensamblador que otros lenguajes de programación pueden usar como destino.
  • Un kit de desarrollo de software que incluye bibliotecas, varias herramientas de depuración, creación de perfiles y compilación, y enlaces que permiten que los lenguajes de programación del lado de la CPU invoquen el código del lado de la GPU.

El objetivo de CUDA es escribir código que pueda ejecutarse en arquitecturas SIMD paralelas masivas compatibles: esto incluye varios tipos de GPU además de hardware que no es GPU como nVidia Tesla. El hardware masivamente paralelo puede ejecutar un número significativamente mayor de operaciones por segundo que la CPU, a un costo financiero bastante similar, que ofrece mejoras de rendimiento de 50 × o más en situaciones que lo permiten.

Uno de los beneficios de CUDA sobre los métodos anteriores es que hay disponible un lenguaje de propósito general, en lugar de tener que usar pixel y sombreadores de vértices para emular las computadoras de propósito general. Ese lenguaje se basa en C con algunas palabras clave y conceptos adicionales, lo que hace que sea bastante fácil para los programadores que no usan GPU.

También es una señal de que nVidia está dispuesto a soportar la paralelización de uso general en su hardware: ahora suena menos como "piratear con la GPU" y más como "usar una tecnología compatible con proveedores", y eso hace que adopción más fácil en presencia de partes interesadas no técnicas.

para empezar a utilizar CUDA, descargar el SDK, lea el manual (en serio, no es que complicado si ya conoce C) y comprar un hardware compatible con CUDA (que puede usar el emulador en un primer momento, pero el rendimiento siendo el último punto de esto, es mejor si realmente puedes probar tu código)

+8

No olvides que CUDA no puede beneficiar a todos los programas/algoritmos: la CPU es buena para realizar operaciones complejas/diferentes en números relativamente pequeños (es decir, <10 hilos/procesos) mientras que la potencia total de la GPU se desata cuando puede hacer simples/las mismas operaciones en cantidades masivas de hilos/puntos de datos (es decir,> 10.000). Es por eso que es tan bueno en, por ejemplo, decodificación/codificación de video: esas son las mismas operaciones simples en una gran cantidad de píxeles (casi un millón en 720p) – dtech

+0

@dtech: absolutamente. –

1

(Negación: Sólo he utilizado CUDA para un proyecto de semestre en 2008, así que las cosas podrían haber cambiado desde entonces.) CUDA es una herramienta de desarrollo para la creación de programas que se pueden ejecutar en las GPU de NVIDIA, así como una API para controlar tales programas desde la CPU.

Las ventajas de la programación de GPU frente a la programación de CPU es que para algunos problemas altamente paralelizables, puede obtener masivas aceleraciones (aproximadamente dos órdenes de magnitud más rápido). Sin embargo, muchos problemas son difíciles o imposibles de formular de una manera que los haga adecuados para la paralelización.

En cierto sentido, CUDA es bastante sencillo, porque puede usar C regular para crear los programas. Sin embargo, para lograr un buen rendimiento, se deben tener en cuenta muchas cosas, incluidos muchos detalles de bajo nivel de la arquitectura de la GPU de Tesla.

Cuestiones relacionadas