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.



Aceleradores

Tecnología

Esta entrada sirve para llevar una discusión que se había abierto en una entrada antigua. Va sobre el uso de aceleradores en supercomputación.

¿Qué es un acelerador?

Un acelerador es un procesador que no es de propósito general (necesita un driver y una CPU para manejar su memoria porque no tiene acceso aleatorio a la RAM ni a la caché de la CPU) diseñado para realizar una operación específica. Como se suele decir, en un acelerador los transistores están en ALUs, no en caches.

Por su naturaleza se derivan dos consecuencias. La primera es que al no tener acceso aleatorio a la memoria es la aplicación la que se encarga de, no sólo decir qué debe calcular, sino de llevarle los datos de manera correcta. La segunda es que no se puede pedir al acelerador hacer algo distinto para lo que fue diseñado.

Los aceleradores tienen los siguientes inconvenientes si queremos utilizarlos en un entorno MPI (Cálculo en paralelo con comunicación mediante mensajes)

  • Si el acelerador se pincha en un bus PCIE 16x el ancho de banda máximo es de aproximadamente 3 GB/s siempre que utilicemos de manera eficiente el full-duplex. Esto es un orden de magnitud por debajo de los controladores de memoria actuales. Este inconveniente significa que los aceleradores no sirven en entornos de análisis de datos.
  • Las redes rápidas consiguen latencias bajas gracias a protocolos de RDMA. El uso de un acelerador aumenta la latencia de comunicación puesto que los datos deben pasar del bus a la memoria y de la memoria al bus de la tarjeta. Esto suele requerir unos cuantos ciclos de reloj.
  • El acelerador debe llevar su propia memoria, y suelen llevar poca. De hecho cuanto más rápido es el acelerador menos memoria lleva. Los SPE del Cell se quedan en 256K y nada de cache ni controladora, son puros registros que hay que mover a mano. nVidia se sale de las gráficas con tarjetas de 4GB.
  • Los aceleradores hacen pocas cosas bien y una de estas cosas que siempre hacen mal es el coma flotante en doble precisión. También hacen mal las operaciones con enteros porque al estar diseñadas para hacer multiplicaciones y sumas no necesitan hacer aritmética de punteros. Esta situación puede mejorar pero no tiene pinta de solucionarse del todo. La doble precisión es esencial en mecánica de fluidos si hay que resolver un sistema de ecuaciones lineales como sucede con los esquemas de corrección de presiones para imponer incompresibilidad. También es importante con los elementos finitos si no queremos que una malla deficiente nos joda las cuentas.
  • Los aceleradores son un objetivo en movimiento. Cuando se estabiliza el SDK para un determinado acelerador ya está saliendo uno nuevo. Y de los compiladores ya ni hablemos; El Cell ha nacido, vivido y muerto antes que el compilador XL pudiera hacer uso de las SPE. Mover los aceleradores siempre significará multiplicar por entre 2 y 10 el coste del código, tanto en tiempo como en personal. Y ya sabemos lo bien que se programa en España, hay muy pocos grupos capaces de salir de un berenjenal como este.
  • Que haya en el mercado Tesla, Larrabee, lo que saque AMD... no significa que sean arquitecturas pensadas en aplicaciones científicas. Más bien todo lo contrario. El procesador del BlueGene tiene muchas otras aplicaciones y si IBM no se hubiera hecho con el meracado de las consolas probablemente no existiría un BlueGene Q. Por desgracia el Mainstream no es la ciencia y todo lo que no es Mainstream es caro.

Pero sigamos con el experimento mental y busquemos alternativas, que las hay. Debemos recordar que los aceleradores son siempre caros, con el mismo dinero podemos

  1. Poner más memoria en cada nodo
  2. Comprar un mejor procesador
  3. Instalar una red con menor latencia y mayor ancho de banda (siempre las hay)
  4. Poner más nodos

Todas estas alternativas funcionan sin tocar ni una coma del código MPI y tienen un efecto inmediato. El programa corre más porque tiene más recursos.

¿Entonces los aceleradores son una mierda? En absoluto. Si tenéis un problema más pequeño de 4GB de RAM en el que no tengáis que utilizar doble precisión vais a obtener speedups de 10x siempre que seáis mínimamente hábiles. Pero por desgracia la Mecánica de Fluidos suele estar fuera de este club.

¿Es posible que los aceleradores solucionen estos problemas? Mi opinión es que es posible pero bastante improbable a un precio competitivo porque un videojuego no requiere un cluster de ordenadores.

¿Se puede ganar algo con los aceleradores en un entorno MPI? Sí siempre que el algoritmo que se utilice sea exageradamente intensivo en cálculo y requiera poca comunicación: doblar proteínas, chocar galaxias, minimizar funcionales. Nada de sacar autovalores, resolver sistemas de ecuaciones, integrar edp parabólicas. En los casos desfavorables se sigue ganando algo pero NUNCA debemos olvidar que hay mejores alternativas a utilizar un acelerador.

Por guillem  |  en: vie 20 Nov 2009

Comentarios