Deja tu comentario. Write your comment here

No se pueden hacer enlaces, el antispam no aceptará el comentario. Do not create any link, the antispammer will not accept the comment.



Guillem Borrell's flying circus. Barcelona Supercomputing Center

Supercomputación

Éste es otro post con peligro de muerte por aburrimiento. Si queréis diversión siempre podéis leer a Tyler.

Tener saraos en el campus de Diagonal de la UPC es una putada. Obviamente con mis padres en Calella no me voy a pillar un hotel. Tardo aproximadamente dos horas y cuarto, puerta a puerta, de mi casa al BSC. Esto significa que si lo que sea empieza a las nueve, mi despertador suena a las 6.

Para los muy profanos que no conozcan el BSC, se trata de un centro de investigación de nivel mundial en temas de supercomputación y calculo en paralelo. Han pasado en sólo cuatro años de tener 50 empleados a 300. Tienen una fuerte relación con IBM aunque hoy en día también hacen cosas con Intel y Microsoft. Ser un centro grande les hace fuertes y lo saben. Alardean con razón que si algún fabricante les intenta vender hardware su primera respuesta es: ¿Y cuánto nos pagáis para que lo usemos?

He ido a aprender sobre GPGPU. Aunque hayamos comprobado que en nuestros códigos que usan algoritmos de orden N no sirva, esto no significa que no estemos interesados en aprender sobre cómo se usan.

Una GPU es un procesador con centenares de cores y una memoria local pequeña y rápida. La manera de programarlas se basa en paralelismo masivo gracias a que los threads, que son llevados por un runtime, son muy baratos. Esto hace que sea frecuente tener ejecutando millares de threads en una única tarjeta. El gran problema es la transferencia de datos entre la memoria de la CPU y la de la tarjeta que hay que hacer a mano y se presta a centenares de técnicas de optimización. Hay cuatro niveles de memoria y cada uno tiene su gracia.

Quiero enfatizar lo de hacer las cosas a mano porque la mayoría del curso iba sobre cómo conseguir buenos speedups a base de aplicar decenas de técnicas de optimización manual tanto al escribir los kernels (las minitareas que se ejecutan en la tarjeta) como en el código CPU. Pinned memory, double buffering, uso de los registros, tiling... Repito que la mayoría de los benchmarks que presentaron eran operaciones > O(N2) como multiplicaciones matriciales o resolución de sistemas lineales de gran tamaño.

Es precisamente en el tema de los runtime, aún muy verde, donde los del BSC se han puesto a trabajar. Isaac Gelado presentó GMAT, un runtime alternativo para CUDA que permite utilizar un único espacio de memoria para la CPU y las tarjetas de las que se dispongan. Tiene tan buena pinta que uno no entiende cómo no Nvidia les compra el trabajo y lo convierten en CUDA 4.0. Tiempo al tiempo.

Xavi Martorell presentó la modificación que han hecho del runtime de sus compiladores Superscalar para las GPU. Los compiladores superscalar utilizan una serie de pragmas parecidos a los de OpenMP para anotar el código y dejar que el runtime paralelice utilizando los recursos disponibles del nodo. Siempre han demostrado buenos rendimientos en todas las plataformas a las que lo han portado pero nunca he tenido tiempo de utilizarlos como es debido. ¿Quizás para el post proceso de la capa límite? Presentaron también una modificación al estándar OpenMP llamado OpenMPT que añade una colección de pragmas más para explicitar el target de una región paralela.

Da la casualidad que Xavi estuvo en IBM Watson trabajando en la red del BG/P. Red de la que podemos decir sin miedo a equivocarnos que es una puta pasada. Así que le estreché la mano y le di las gracias. Por lo que me contó el proceso de optimización de la implementación de MPI del BG/P era esencialmente artesanal. Corrían casos, obtenían trazas completas de las comunicaciones e iban eliminando cuellos de botella gradualmente.

Probablemente tenga que volver en septiembre. Al ritmo al que los visito van acabar pensando que trabajo ahí.

Por guillem  |  en: vie 09 Jul 2010

Comentarios

Multiplicación matricial

  • jgpallero
  • karma: 0
  • dom 11 Jul 2010

Guillem, si no me equivoco, la multiplicación matricial es O(N^3).