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).
Muy buen post. Estoy empezando a ver cuda y quería saber como compilaste el código ya que me encuentro un poco perdido
Realmente me ha gustado la explicación y la comparación de un programa c y cuda es muy claro.
Hasta ahora no he podido compilar, por error con en cutil.h, como podría solucionar eso?