Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
GPUs para científicos Más allá de los videojuegos Antonio Mora García
Una GPU es para videojuegos, ¿no? <ul><li>Una GPU (Graphics Processor Unit) es la parte fundamental de lo que todos conoce...
¿Y cómo es una GPU por dentro? <ul><li>Aparte de estar diseñada y optimizada desde un principio para el  cálculo  en coma ...
Ya, pero ¿cómo es por dentro? <ul><li>Así:  </li></ul><ul><li>o también: </li></ul><ul><li>Claramente enfocada al paraleli...
¿CPU o GPU? <ul><li>Si uno quiere jugar al Crysis 2 con todo a tope necesitará de ambas cosas, lo que viene a denominarse ...
¿Entonces?, ¿CPU o GPU? <ul><li>Vamos a mirar una grafiquilla (algo antigua, si): </li></ul><ul><li>Y unos daticos de ejec...
¿Y bien?, ¿CPU o GPU? <ul><li>Y ahora pensemos………mmmm: </li></ul><ul><ul><li>Si la tarjeta gráfica más potente actualmente...
Por última vez, ¿CPU o GPU? <ul><li>Una comparativa más ‘profesiona’ para acabar de salir de dudas: </li></ul>http :// www...
Aceptaaaamoooos GPUuuuu <ul><li>¿Cómo unidad de procesamiento en mi programa? </li></ul><ul><li>Siiii, porque la idea gene...
GPGPU (yiipiiii-yiipiiii-iuuuu) <ul><li>Aunque parezca la primera parte de la expresión de John McClane en la Jungla de Cr...
¿Y esto es legal?¿no es pecado? <ul><li>Claro, de hecho muchísimos científicos están  publicando a saco adaptando y desarr...
¿Y cual es la pega? <ul><li>No todos los algoritmos se pueden adaptar a una GPU, deben poder paralelizarse al nivel que se...
CUDA (I) <ul><li>C ompute  U nified  D evice  A rchitecture . Hace  referencia tanto a un  compilador , como a un  conjunt...
CUDA (II) <ul><li>Ventajas: </li></ul><ul><li>Lecturas dispersas: se puede consultar cualquier posición de memoria.  </li>...
CUDA (III) <ul><li>Compilar en CUDA no es un paso tan simple como en otros lenguajes, ya que un programa combina código pa...
CUDA (IV) <ul><li>Este código es compatible con todas las tarjetas nVidia recientes y  (en teoría) no habría que reescribi...
AGs sobre GPUs <ul><li>Los algoritmos genéticos han sido bastante prolíficos en cuanto a su adaptación al maravilloso mund...
AEs sobre GPUs (publicaciones) <ul><li>Algunos ejemplos de algoritmos evolutivos en GPUs: </li></ul><ul><ul><li>Parallel E...
EASEA <ul><li>Es una API de alto nivel (como el famosísimo JEO), que permite diseñar algoritmos evolutivos con ‘relativa’ ...
GPGPGPU (yiipiiii-yiipiiii-yiipiiii-iuuuu) <ul><li>Aunque parezca el grito de un vaquero montando un toro bravo, se trata ...
Otros algoritmos en GPUs <ul><li>Hay publicaciones de otros muchos algoritmos, si bien, este campo todavía esta bastante a...
Paginillas guapas <ul><li>http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units </li></ul><ul><li>ht...
G racias  P or v U estra  atención
Upcoming SlideShare
Loading in …5
×

GPUs para Científicos

1,976 views

Published on

En esta presentación, se comentan las nuevas tendencias en cuanto al aprovechamiento de la potencia de las GPUs para la implementación y ejecución de algoritmos, para resolver problemas complejos.

Published in: Technology
  • Be the first to comment

GPUs para Científicos

  1. 1. GPUs para científicos Más allá de los videojuegos Antonio Mora García
  2. 2. Una GPU es para videojuegos, ¿no? <ul><li>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). </li></ul><ul><li>Se trata de un procesador dedicado al cómputo gráfico y, por tanto, optimizado para el cálculo de operaciones en coma flotante. </li></ul><ul><li>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). </li></ul>
  3. 3. ¿Y cómo es una GPU por dentro? <ul><li>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’. </li></ul><ul><li>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. </li></ul><ul><li>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 ). </li></ul><ul><li>Se trata de una arquitectura claramente segmentada . </li></ul><ul><li>Además, cuentan con gran cantidad de memoria RAM , la cual suele ser muy rápida . </li></ul><ul><li>TRATAMIENTO DE GRÁFICOS </li></ul><ul><li>a la GPU le llega la información de la CPU en forma de vértices </li></ul><ul><li>En el vertex shader se realizan transformaciones como la rotación o el movimiento de las figuras </li></ul><ul><li>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 </li></ul><ul><li>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 </li></ul><ul><li>Finalmente, se aplican algunos efectos como el antialiasing , blending y el efecto niebla </li></ul>
  4. 4. Ya, pero ¿cómo es por dentro? <ul><li>Así: </li></ul><ul><li>o también: </li></ul><ul><li>Claramente enfocada al paralelismo </li></ul>Procesador o core Hilo de vértices Hilo de geometría Hilo de píxeles
  5. 5. ¿CPU o GPU? <ul><li>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). </li></ul><ul><li>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. </li></ul>
  6. 6. ¿Entonces?, ¿CPU o GPU? <ul><li>Vamos a mirar una grafiquilla (algo antigua, si): </li></ul><ul><li>Y unos daticos de ejecución de instrucciones: </li></ul><ul><ul><ul><li>GeForce 8800 GTX (128 cores)  speedup x30 respecto a un Pentium IV </li></ul></ul></ul><ul><ul><ul><li>GeForce GTX 270 (240 cores)  speedup x120 respecto a un Dual Core </li></ul></ul></ul><ul><ul><ul><li>GeForce GTX 480 (480 cores)  speedup x240 respecto a un Core i7 </li></ul></ul></ul>
  7. 7. ¿Y bien?, ¿CPU o GPU? <ul><li>Y ahora pensemos………mmmm: </li></ul><ul><ul><li>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€. </li></ul></ul><ul><ul><li>Cuenta con 480 cores trabajando a 700MHz cada uno y 1,4GHz la tarjeta en si. </li></ul></ul><ul><ul><li>Tiene un speedup de x240 en comparación con una de las cPUs punteras (un Intel i7). </li></ul></ul><ul><ul><li>Podemos disponer de hasta 4 de estas tarjetas en un mismo PC (en puertos PCI y/o AGP). </li></ul></ul><ul><ul><li>Obtendríamos un speedup global de x800 respecto a dicha CPU… </li></ul></ul><ul><ul><ul><li>Eso parece mucho, ¿lo es?: </li></ul></ul></ul><ul><ul><ul><li>- 1 hora de procesamiento en 4 GTX480  50 días en CPU i7 </li></ul></ul></ul><ul><ul><ul><li>- 1 día de procesamiento en 4 GTX480  1 año en CPU i7 </li></ul></ul></ul><ul><ul><li>Y para los científicos ‘pobres’ siempre queda la opción de una tarjeta antigua: </li></ul></ul><ul><ul><li>GeForce 8800 GTX, 80€, 128 cores a 500MHz cada uno, </li></ul></ul><ul><ul><li>consigue una mejora de x30 respecto a un Pentium IV </li></ul></ul><ul><ul><li> ¿Dónde hay que firmar?...¿No? </li></ul></ul>
  8. 8. Por última vez, ¿CPU o GPU? <ul><li>Una comparativa más ‘profesiona’ para acabar de salir de dudas: </li></ul>http :// www.youtube.com / watch?v =- P28LKWTzrI ¡¡¡Si haceis esto molareis a las nenas!!! (y más si usais su foto)
  9. 9. Aceptaaaamoooos GPUuuuu <ul><li>¿Cómo unidad de procesamiento en mi programa? </li></ul><ul><li>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. </li></ul><ul><li>Las GPUs se han venido aprovechando desde 2001 para la ejecución de instrucciones y programas (ajenos o no a la parte gráfica). </li></ul><ul><li>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. </li></ul><ul><li>Los datos a procesar se pasaban como matrices (a modo de texturas) </li></ul>
  10. 10. GPGPU (yiipiiii-yiipiiii-iuuuu) <ul><li>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. </li></ul><ul><li>Se pueden implementar simulaciones complejas, aplicaciones de minería de datos, inteligencia artificial, criptografía, etc, etc. </li></ul>
  11. 11. ¿Y esto es legal?¿no es pecado? <ul><li>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. </li></ul><ul><li>Existen varias APIs para programar GPUs, las más famosas son: </li></ul><ul><ul><li>CUDA (nVidia) </li></ul></ul><ul><ul><li>OpenCL (Apple) </li></ul></ul><ul><ul><li>MS Accelerator (Microsoft, ¡cómo no se iba a subir al carro!) </li></ul></ul><ul><ul><li>Brook GPU (Universidad de Stanford) </li></ul></ul><ul><ul><li>Close To the Metal o CTM (ATI) </li></ul></ul>
  12. 12. ¿Y cual es la pega? <ul><li>No todos los algoritmos se pueden adaptar a una GPU, deben poder paralelizarse al nivel que se requiere para aprovechar la GPU. </li></ul><ul><li>No deben requerir de grandes cantidades de memoria, porque está bastante limitada en las GPUs. </li></ul><ul><li>Tampoco requerir muchos accesos a memoria porque se desaprovecharía el paralelismo. </li></ul><ul><li>Hay que aprender nuevas formas de programar y compilar. </li></ul><ul><li>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. </li></ul>
  13. 13. CUDA (I) <ul><li>C ompute U nified D evice A rchitecture . 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. </li></ul><ul><li>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. </li></ul><ul><li>Funciona en todas las GPUs nVidia de la serie G8X en adelante, incluyendo GeForce, Quadro y la línea Tesla. </li></ul><ul><li>Se puede utilizar en todos los sistemas operativos y es gratuita. </li></ul><ul><li>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. </li></ul>
  14. 14. CUDA (II) <ul><li>Ventajas: </li></ul><ul><li>Lecturas dispersas: se puede consultar cualquier posición de memoria. </li></ul><ul><li>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é. </li></ul><ul><li>Lecturas más rápidas de y hacia la GPU. </li></ul><ul><li>Soporte para enteros y operadores a nivel de bit. </li></ul><ul><li>Inconvenientes: </li></ul><ul><li>No se puede utilizar recursividad, punteros a funciones, variables estáticas dentro de funciones o funciones con número de parámetros variable </li></ul><ul><li>En precisión simple no soporta números desnormalizados o NaNs </li></ul><ul><li>Puede existir un cuello de botella entre la CPU y la GPU por los anchos de banda de los buses y sus latencias. </li></ul><ul><li>Los threads, por razones de eficiencia, deben lanzarse en grupos de al menos 32, con miles de hilos en total </li></ul>
  15. 15. CUDA (III) <ul><li>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). </li></ul><ul><li>Se tienen dos compiladores: </li></ul><ul><ul><li>C++ (EDG)  genera ficheros .cpp para la CPU </li></ul></ul><ul><ul><li>Open64  genera ficheros .cpp y .ptx (Parallel Thread eXecution) </li></ul></ul>
  16. 16. CUDA (IV) <ul><li>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 </li></ul>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.
  17. 17. AGs sobre GPUs <ul><li>Los algoritmos genéticos han sido bastante prolíficos en cuanto a su adaptación al maravilloso mundo de las GPUs. </li></ul><ul><li>De hecho y pensando incluso ‘en bruto’ (algún científico vasco seguramente (es broma :D)): </li></ul><ul><ul><li>Con 480 procesadores trabajando en paralelo, se pueden tratar poblaciones gigantescas ( huge population algorithms ), de hasta 1.000.000 de individuos . </li></ul></ul><ul><ul><li>Lo cual tiene sus ventajas: </li></ul></ul><ul><ul><ul><ul><li>No hay convergencia prematura </li></ul></ul></ul></ul><ul><ul><ul><ul><li>No es necesaria la mutación </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Es posible obtener una solución de forma aleatoria en la </li></ul></ul></ul></ul><ul><ul><ul><ul><li>primera generación </li></ul></ul></ul></ul>
  18. 18. AEs sobre GPUs (publicaciones) <ul><li>Algunos ejemplos de algoritmos evolutivos en GPUs: </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  19. 19. EASEA <ul><li>Es una API de alto nivel (como el famosísimo JEO), que permite diseñar algoritmos evolutivos con ‘relativa’ facilidad. </li></ul><ul><li>Las siglas significan EA sy S pecification of E volutionary A lgorithms (y se pronuncia “easy”, según dicen en su web). </li></ul><ul><li>http ://sourceforge.net/projects/easea/ </li></ul>
  20. 20. GPGPGPU (yiipiiii-yiipiiii-yiipiiii-iuuuu) <ul><li>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. </li></ul><ul><li>Han sido con diferencia los más prolíficos en el campo de la investigación en este entorno. </li></ul><ul><li>En la URL: </li></ul><ul><li> http://www.gpgpgpu.com/ </li></ul><ul><li> se pueden encontrar muchas publicaciones a este respecto </li></ul>
  21. 21. Otros algoritmos en GPUs <ul><li>Hay publicaciones de otros muchos algoritmos, si bien, este campo todavía esta bastante abierto y apenas explotado: </li></ul><ul><ul><li>GPU implementation of neural networks. K. Oh . Pattern Recognition, 37, 1311-1314, 2004. </li></ul></ul><ul><ul><li>Parallelization of cellular neural networks on GPU . T.Y. Ho, P.M. Lam, C.S. Leung, Pattern Recognition, 41 (8), pp 2684-2692, 2008 </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  22. 22. Paginillas guapas <ul><li>http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units </li></ul><ul><li>http://gpgpu.org/ </li></ul><ul><li>http://www.nvidia.es/object/cuda_home_new_es.html </li></ul><ul><li>http://developer.nvidia.com/object/gpucomputing.html </li></ul><ul><li>http://s08.idav.ucdavis.edu/munshi-opencl.pdf </li></ul><ul><li>http://developer.nvidia.com/page/cg_main.html </li></ul><ul><li>http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html </li></ul><ul><li>http://jose-juan.computer-mind.com/jose-juan/Cg-C-for-graphics.php </li></ul>
  23. 23. G racias P or v U estra atención

×