GPUs para Científicos

23
GPUs para científicos Más al lá de los videojuegos Antonio Mora García

Transcript of GPUs para Científicos

Page 1: GPUs para Científicos

GPUs para cie

ntíficos

Más allá de los videojuegosAntonio Mora García

Page 2: GPUs para Científicos

Una GPU es para videojuegos, ¿no?

• Una GPU (Graphics Processor Unit) es la parte fundamental de lo que todos conocemos como una tarjeta gráfica. La cual es el miembro más importante a la hora de ejecutar videojuegos con gran carga gráfica (polígonos, efectos, etc) en un PC (o videoconsola).

• Se trata de un procesador dedicado al cómputo gráfico y, por tanto, optimizado para el cálculo de operaciones en coma flotante.

• A lo largo de los años ha habido varias empresas dedicadas a su construcción, pero en la actualidad, son dos las principales: nVidia (con sus GeForce) y ATI (con sus Radeon).

Page 3: GPUs para Científicos

¿Y cómo es una GPU por dentro?

• Aparte de estar diseñada y optimizada desde un principio para el cálculo en coma flotante (básico en la gestión de 3D), también incluye primitivas gráficas ‘de serie’.

• Las aplicaciones gráficas conllevan un alto grado de paralelismo inherente, ya que sus unidades fundamentales de cálculo (vértices y píxeles) son independientes.

• De forma que cualquier modelo de gama media/baja actual cuenta con 6 u 8 procesadores de vértices (que ejecutan Vertex Shaders), y del orden de 12 a 24 procesadores de fragmentos o píxeles (que ejecutan Pixel Shaders o Fragment Shaders).

• Se trata de una arquitectura claramente segmentada.

• Además, cuentan con gran cantidad de memoria RAM, la cual suele ser muy rápida.

TRATAMIENTO DE GRÁFICOS

• a la GPU le llega la información de la CPU en forma de vértices• En el vertex shader se realizan transformaciones como la rotación o el movimiento de las

figuras• Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se

transforman en píxeles mediante el proceso de rasterización• El principal cuello de botella del chip gráfico es el pixel shader: transformaciones

referentes a los píxeles, tales como la aplicación de texturas• Finalmente, se aplican algunos efectos como el antialiasing, blending y el efecto niebla

Page 4: GPUs para Científicos

Ya, pero ¿cómo es por dentro?

Así:

o también:

Claramente enfocada al paralelismo

Procesador o core

Hilo de vértices Hilo de geometría Hilo de píxeles

Page 5: GPUs para Científicos

¿CPU o GPU?

• Si uno quiere jugar al Crysis 2 con todo a tope necesitará de ambas cosas, lo que viene a denominarse en términos rigurosos un pepinaco (tirando por lo bajo: un i7, con 4GB de RAM y una gráfica para mover todos los juegos de PC de los últimos 3 años al mismo tiempo).

• Pero ya hemos dicho que esta presentación es para científicos que pasan de los videojuegos (que los hay) y solo buscan la potencia de computo como agua de mayo.

Page 6: GPUs para Científicos

¿Entonces?, ¿CPU o GPU?

• Vamos a mirar una grafiquilla (algo antigua, si):

• Y unos daticos de ejecución de instrucciones:

GeForce 8800 GTX (128 cores) speedup x30 respecto a un Pentium IV GeForce GTX 270 (240 cores) speedup x120 respecto a un Dual Core GeForce GTX 480 (480 cores) speedup x240 respecto a un Core i7

Page 7: GPUs para Científicos

¿Y bien?, ¿CPU o GPU? Y ahora pensemos………mmmm:

1) Si la tarjeta gráfica más potente actualmente (o hasta hace poco) es la GeForce GTX 480 (Fermi), la cual sale por unos 350€.

2) Cuenta con 480 cores trabajando a 700MHz cada uno y 1,4GHz la tarjeta en si.

3) Tiene un speedup de x240 en comparación con una de las cPUs punteras (un Intel i7).

4) Podemos disponer de hasta 4 de estas tarjetas en un mismo PC (en puertos PCI y/o AGP).

5) Obtendríamos un speedup global de x800 respecto a dicha CPU… Eso parece mucho, ¿lo es?:

- 1 hora de procesamiento en 4 GTX480 50 días en CPU i7- 1 día de procesamiento en 4 GTX480 1 año en CPU i7

6) Y para los científicos ‘pobres’ siempre queda la opción de una tarjeta antigua:

GeForce 8800 GTX, 80€, 128 cores a 500MHz cada uno, consigue una mejora de x30 respecto a un Pentium IV

¿Dónde hay que firmar?...¿No?

Page 8: GPUs para Científicos

Por última vez, ¿CPU o GPU?

• Una comparativa más ‘profesiona’ para acabar de salir de dudas:

http://www.youtube.com/watch?v=-P28LKWTzrI

¡¡¡Si haceis esto molareis a las nenas!!! (y más si usais su foto)

Page 9: GPUs para Científicos

Aceptaaaamoooos GPUuuuu

• ¿Cómo unidad de procesamiento en mi programa?Siiii, porque la idea general será ejecutar parte de nuestro código en la CPU y lanzar otra parte en paralelo en la GPU, por ejemplo, la evaluación de alguna función.

• Las GPUs se han venido aprovechando desde 2001 para la ejecución de instrucciones y programas (ajenos o no a la parte gráfica).

• En principio, se debían crear programas específicos para ellas en ensamblador, luego fueron apareciendo mejores lenguajes, como el famoso Cg de nVidia (C para gráficos) o HLSL.

• Los datos a procesar se pasaban como matrices (a modo de texturas)

Page 10: GPUs para Científicos

GPGPU (yiipiiii-yiipiiii-iuuuu)

• Aunque parezca la primera parte de la expresión de John McClane en la Jungla de Cristal (“yippie-kay-jay, hijo de p…“), se trata de General Purpose GPU, es decir, usar las GPUs como procesadores de propósito general, para procesamiento de instrucciones/operaciones de gestión intensiva de datos, no solo destinadas a gráficos, sino también de carácter científico/erótico-festivo.

• Se pueden implementar simulaciones complejas, aplicaciones de minería de datos, inteligencia artificial, criptografía, etc, etc.

Page 11: GPUs para Científicos

¿Y esto es legal?¿no es pecado?

• Claro, de hecho muchísimos científicos están publicando a saco adaptando y desarrollando sus algoritmos para este tipo de arquitecturas, aprovechando la potencia de las GPUs.

• Existen varias APIs para programar GPUs, las más famosas son:– CUDA (nVidia)– OpenCL (Apple)– MS Accelerator (Microsoft, ¡cómo no se iba a subir al carro!)– Brook GPU (Universidad de Stanford)– Close To the Metal o CTM (ATI)

Page 12: GPUs para Científicos

¿Y cual es la pega?

• No todos los algoritmos se pueden adaptar a una GPU, deben poder paralelizarse al nivel que se requiere para aprovechar la GPU.

• No deben requerir de grandes cantidades de memoria, porque está bastante limitada en las GPUs.

• Tampoco requerir muchos accesos a memoria porque se desaprovecharía el paralelismo.

• Hay que aprender nuevas formas de programar y compilar.

• No hay que caer en la tentación de probar ‘como se ven’ los nuevos juegos de PC cuando nos compremos la última GeForce, en lugar de trabajar.

Page 13: GPUs para Científicos

CUDA (I)• Compute Unified Device Architecture. Hace

referencia tanto a un compilador, como a un conjunto de herramientas de desarrollo creadas por (pura) nVidia que permiten a los programadores usar una variación de C para codificar algoritmos en GPUs de nVidia.

• Por medio de wrappers se pueden usar Python, Fortran o Java en lugar de C/C++ y en el futuro también se añadirán OpenCL y Direct3D.

• Funciona en todas las GPUs nVidia de la serie G8X en adelante, incluyendo GeForce, Quadro y la línea Tesla.

• Se puede utilizar en todos los sistemas operativos y es gratuita.

• Actualmente se va a lanzar (o se ha lanzado) la versión 3.0 que incluye muchas mejoras y facilidades de cara al programador, entre ellas las clases.

Page 14: GPUs para Científicos

CUDA (II)• Ventajas:• Lecturas dispersas: se puede consultar cualquier posición de memoria. • Memoria compartida: CUDA pone a disposición del programador un área de

memoria de 16KB que se compartirá entre threads. Dado su tamaño y rapidez puede ser utilizada como caché.

• Lecturas más rápidas de y hacia la GPU. • Soporte para enteros y operadores a nivel de bit.

• Inconvenientes:• No se puede utilizar recursividad, punteros a funciones, variables

estáticas dentro de funciones o funciones con número de parámetros variable

• En precisión simple no soporta números desnormalizados o NaNs • Puede existir un cuello de botella entre la CPU y la GPU por los

anchos de banda de los buses y sus latencias. • Los threads, por razones de eficiencia, deben lanzarse en grupos

de al menos 32, con miles de hilos en total

Page 15: GPUs para Científicos

CUDA (III)• Compilar en CUDA no es un paso tan simple como en otros

lenguajes, ya que un programa combina código para cPU y para GPU (identificado por extensiones especiales).

• Se tienen dos compiladores: – C++ (EDG) genera ficheros .cpp para la CPU– Open64 genera ficheros .cpp y .ptx (Parallel Thread

eXecution)

Page 16: GPUs para Científicos

CUDA (IV)• Este código es compatible con todas las tarjetas nVidia recientes y

(en teoría) no habría que reescribirlo para futuras tarjetas, solo recompilarlo

La ejecución de un programa consiste en copiar los datos a memoria de la GPU,y pasar el control a la GPU (a los thread processors),La ejecución se hace sobre un grid (multihilo, memoria compartida,…).Finalmente se copian los resultados de la memoria de la GPU a la de la cPU.

Page 17: GPUs para Científicos

AGs sobre GPUs

• Los algoritmos genéticos han sido bastante prolíficos en cuanto a su adaptación al maravilloso mundo de las GPUs.

• De hecho y pensando incluso ‘en bruto’ (algún científico vasco seguramente (es broma :D)):– Con 480 procesadores trabajando en paralelo, se pueden tratar

poblaciones gigantescas (huge population algorithms), de hasta 1.000.000 de individuos.

– Lo cual tiene sus ventajas:– No hay convergencia prematura– No es necesaria la mutación– Es posible obtener una solución de forma aleatoria en la primera generación

Page 18: GPUs para Científicos

AEs sobre GPUs (publicaciones)

• Algunos ejemplos de algoritmos evolutivos en GPUs:

– Parallel Evolutionary Algorithms on Graphics Processing Unit. M. L. Wong, T. T. Wong and K. L. Fok. Proceedings of IEEE Congress on Evolutionary Computation 2005 (CEC 2005), Vol. 3, pp. 2286-2293, 2005.

– Evolutionary Computing on Consumer Graphics Hardware. K. L. Fok, T. T. Wong and M. L. Wong, IEEE Intelligent Systems, Vol. 22, No. 2, 2007, pp. 69-78, 2007.

– GPU-Based Island Model for Evolutionary Algorithms. T.V. Luong, N. Melab, E.G Talbi. Proceedings of the 12th annual conference on Genetic and evolutionary computation (GECCO 2010), pp. 1089-1096, 2010.

Page 19: GPUs para Científicos

EASEA

• Es una API de alto nivel (como el famosísimo JEO), que permite diseñar algoritmos evolutivos con ‘relativa’ facilidad.

• Las siglas significan EAsy Specification of Evolutionary Algorithms (y se pronuncia “easy”, según dicen en su web).

http://sourceforge.net/projects/easea/

Page 20: GPUs para Científicos

GPGPGPU (yiipiiii-yiipiiii-yiipiiii-iuuuu)

• Aunque parezca el grito de un vaquero montando un toro bravo, se trata de la implementación de Algoritmos de Programación Genética sobre GPUs de propósito general.

• Han sido con diferencia los más prolíficos en el campo de la investigación en este entorno.

• En la URL: http://www.gpgpgpu.com/

se pueden encontrar muchas publicaciones a este respecto

Page 21: GPUs para Científicos

Otros algoritmos en GPUs

• Hay publicaciones de otros muchos algoritmos, si bien, este campo todavía esta bastante abierto y apenas explotado:

– GPU implementation of neural networks. K. Oh. Pattern Recognition, 37, 1311-1314, 2004.

– Parallelization of cellular neural networks on GPU. T.Y. Ho, P.M. Lam, C.S. Leung, Pattern Recognition, 41 (8), pp 2684-2692, 2008

– Implementation of Ant Colony Algorithm Based on GPU. W. Jiening, D. Jiankang, Z. Chunfeng. Proceedings of the 2009 6th International Conference on Computer Graphics, Imaging and Visualization (CGIV 2009), pp 50-53, 2009.

– Particle Swarm Optimization within the CUDA Architecture. L. Mussi, S. Cagnoni. Proceedings of the 11th annual conference on Genetic and evolutionary computation (GECCO 2009), 2009.

Page 22: GPUs para Científicos

Paginillas guapas• http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units

• http://gpgpu.org/

• http://www.nvidia.es/object/cuda_home_new_es.html• http://developer.nvidia.com/object/gpucomputing.html

• http://s08.idav.ucdavis.edu/munshi-opencl.pdf

• http://developer.nvidia.com/page/cg_main.html• http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html• http://jose-juan.computer-mind.com/jose-juan/Cg-C-for-graphics.php

Page 23: GPUs para Científicos

Gracias Por vUestra atención