GPU Computing

Hace unos días supe de la mano de @joseluisbriz en una de sus clases que, pese a que nos sorprenda ver ordenadores multi-core de propósito general con 4 núcleos y doble hilo de ejecución como los nuevos i7 de Intel, no estamos hablando de un número bárbaro de núcleos por CPU ya que actualmente nVidia está montando hasta 448 núcleos por GPU en sus nuevos procesadores gráficos destinados a cálculos de alto rendimiento, como el último modelo Tesla C2050/C2070. Podríamos pensar que el hecho de que se incluyan más de 400 núcleos por GPU podría tratarse de un producto inalcanzable para los usuarios de a pie, pero nada más lejos de la realidad. Vale, es cierto que si nos fijamos en el Tesla C2050 tendríamos que desembolsar unos 2000€, ¿pero qué pasa con otras tarjetas de menor envergadura? Si echamos un vistazo a una Nvidia GT 440, que actualmente está en el mercado por menos de 100€ vemos que tiene 144 núcleos en su GPU. Asombroso. ¿Pero de qué nos puede servir esto? Es cierto que los procesadores gráficos crecen a mayor velocidad que las CPU en relación a número de núcleos, así que Nvidia decidió explotar esta realidad y lanzar en 2007, el SDK de programación CUDA, con el que podemos desarrollar algoritmos destinados a ejecutarse en GPU mediante una sintáxis muy similar a la de C. Este tipo de programación tiene varios inconvenientes frente a la programación general para CPU y es que las GPU tienen algunas limitaciones a la hora de ejecutar ciertos códigos como, recursividad, número de parámetros dinámico, etc. De modo que seguimos necesitando la CPU para realizar ejecutar los algoritmos. CUDA ofrece una interfaz de desarrollo que abstrae al programador de en qué sitio se está ejecutando cada parte del algoritmo de manera que las partes secuenciales del algoritmo las ejecutará la CPU, mientras que las partes que puedan ejecutarse de forma paralela se realizarán en la GPU, aprovechando así su capacidad para lanzar muchísimos hilos de ejecución aprovechando varios núcleos de la GPU exprimiendo así la potencia de cálculo en paralelo que pueden ofrecer los procesadores gráficos. En definitiva este era un mundo del cual poco me había informado desde que supe del proyecto SETI@Home para encontrar vida extraterrestre gracias a la computación distribuída y el aprovechamiento de la GPU, pero esta es otra historia de la que hablaré en otro momento. Mientras tanto, os diré que no deberíamos perder este asunto de vista porque muy probablemente las aplicaciones se empiecen a programar para aprovechar tanto la CPU como la GPU. Podéis encontrar más información en los siguientes links:

Actualización: En la keynote que presentó Nvidia en la Nvidia’s Technical GPU Conference, se mostró el roadmap previsto por la compañía y se vió que los sucesores de Fermi (con 512 núcleos por GPU en la actualidad) serán Kepler yMaxwell llegando a cuatriplicar los GFLOPS por Watio en los próximos 2 años. Una pasada.