CUDA
sábado, septiembre 13, 2008 |
Bloggeado por
carlos |
Editar entrada
Hace algunos dias me tope con una tecnología de nVidia llamada CUDA. uhmmm ¿Para que sirve? básicamente para utilizar el procesamiento many-core de los GPU's.
Además los GPU's modernos nos permiten desarrollar programas utilizando vector programming, así como utilizar algunas "opciones extra" a la hora de trabajar con floats...
Bien, a esto le vamos a agregar que podemos desarrollar nuestros programas en lenjuague C, e incluso integrarlo en varios IDE's.
Hace un rato me puse a integrarlo en VC++ 2005 (Guía ) y todo funciona perfectamente (ea ojo, solo vamos a utilizar el editor, para compilar necesitamos utilizar el compilador de CUDA)
Veamos un pequeño ejemplo pasado en C++
|
Sencillo, simplemente creamos un array y le aplicamos operaciones a lo bruto (a lo bruto).
Ahora nuestro ejemplo portado a CUDA sería algo así:
|
Solo que esta pieza corre dos veces más rápido!! (AMD Athlon X2 vs GeForce 8800 GTX) y eso que aún estamos contando el tiempo de creación de datos que en realidad solo pasaría una vez en el programa.
¿En que es diferente el código?
El código en CUDA, tiene una función extra, esta función es nuestro kernel, en otras palabras la función que cargaremos al GPU; esto es elemental puesto que a todos los datos los vamos a procesar igual (como en los shaders), ademas todos los datos debemos de crearlos en el host, osea en la PC (ouch!! solo imaginen que la tarjeta de video esta aparte) y en el dispositivo (la tarjeta de video que suponemos esta aparte) y al hacer esto debemos de preocuparnos por su sincronización.
Este ejemplo es estupidamente sencillo, pero ahora imaginemos que podemos procesar partículas (jejeje voy a hacer eso esta semana), fluidos, física, u otro tipo de cosas donde el procesamiento es elemental, sobre todo cuando vamos a aplicar una misma función a una gran cantidad de datos (SIMD - Simple Input Multiple Data).
Suscribirse a:
Comentarios de la entrada (Atom)
1 comentarios:
Genial, pero mira, en la llamada que haces al kernel, cómo sabes qué es lo que le tienes que pasar?? me refiero que cómo sabes que tienes que poner dentro de <<< >>> , muchas gracias! saludos
Publicar un comentario