Anterior: Niños con juguetes | Siguiente: Cocktail para jóvenes fracasados (definitivo)
Sobre las tarjetas aceleradoras (y fin)
Supercomputación
Al volver de la presentación de IBM (hablo de ella en la entrada
anterior) estuvimos hablando un rato con Javier sobre arquitecturas
de cálculo. Somos grandes usuarios del Mare Nostrum y nos interesa
saber qué se nos viene encima con la nueva máquina del BSC. Hemos
recibido varios rumores e información contradictoria: Power 7, Blue
Gene/P y la última es Intel Nehalem con aceleradoras Nvidia
Fermi.
El tema de las tarjetas aceleradoras en supercomputación es ya
recurrente y empieza a ser cansino así que, en vez de simplemente
decir que a los que hacemos turbulencia no nos hace especial
ilusión, voy a demostrarlo con números.
De manera simplificada se puede decir que cualquier algoritmo se
basa en mover memoria al procesador, realizar cálculos en él y
devolver el resultado. Es una simplificación grosera de la
arquitectura de von Neuman pero nos servirá para entender las
cuentas.
Entonces el tiempo de cálculo total tc es igual al
tiempo necesario para mover los datos al procesador mas el tiempo
necesario para realizar los cálculos. El primero será proporcional
al número de datos almacenados dividido por el ancho de banda de
acceso a memoria y el segundo será igual a las operaciones
necesarias dividido por el número de operaciones en coma flotante
por segundo.
tc ~ N/BW +
C/Flops
Para entenderlo un poco mejor los argumentos adimensionalizaremos
el tiempo total con el tiempo característico de la memoria:
τc ~ 1 +
(C/N)(BW/Flops)
C/N es el número de operaciones dividido por la memoria utilizada y
BW/Flops la relación entre el ancho de banda de memoria y la
potencia de cálculo del procesador. Históricamente BW/Flops ha
estado siempre sobre el 0.1 en arquitecturas no aceleradas pero en
una aceleradora alcanza valores de entre 10-3 y
10-4.
En lo que respecta al primer término depende en gran medida del
algoritmo que requiera más tiempo de cálculo y siempre es una
función de N. Por ejemplo, una transformada rápida de Fourier es N
log N, multiplicar una matriz llena por un vector es N (cuidado
porque muchos se confunden con esta operación, N no es el número de
incógnitas sino la memoria almacenada; la matriz también hay que
ponerla en algún sitio), resolver un sistema lineal de ecuaciones es
N2... Un canal turbulento es más o menos N log N porque
lo que mandan son las transformadas de Fourier. Los códigos de
mecánica de fluidos están entre el N, el N log N y, en menor medida,
N2. Minimizar un funcional para plegar una proteína está
en N3. Entonces el término C/N es, para nuestro caso,
log N. Teniendo en cuenta que la memoria de un nodo está sobre los
2 y los 8 GBi, log N está sobre 10 (siempre hablando de órdenes de
magnitud).
Si nos sacamos la cuenta de (C/N)(BW/Flops) para un Blue Gene (o
cualquier otro cluster Beowulf convencional) nos de algo parecido a
1, τc~ 2 y no estemos tirando hardware. Si
utilizáramos aceleradoras esta cuenta nos saldría 0.01 con lo que
τc ~ 1.01. Ahora pensaréis que 1.01 es menor que 2
pero esta cifra hay que multiplicarla por el N/BW que es entre 5 y 10 veces mayor en
en las plataformas aceleradas. Lo único que dicen estos números es
que, hagamos lo que hagamos, el tiempo característico de la memoria
es el que manda y la prioridad debe ser aumentar BW. En estos casos
la tarjeta se utiliza como una unidad vectorial más y quien realiza
la mayor parte del trabajo es el procesador que tiene mayor BW.
Las tarjetas aceleradoras son interesantes cuando C es del orden de
N2 o mayor, entonces (C/N)(BW/Flops) será siempre mucho
mayor que uno, el tiempo de la memoria será despreciable y cualquier
mejora en la relación (BW/Flops) será bienvenida.
Aún así, y por desgracia, no es el caso de la turbulencia y la
mecánica de fludos computacional. Una cosa está clara, si hay que
usar aceleradoras se usarán.
-
Tags:
Ingeniería
Al volver de la presentación de IBM (hablo de ella en la entrada anterior) estuvimos hablando un rato con Javier sobre arquitecturas de cálculo. Somos grandes usuarios del Mare Nostrum y nos interesa saber qué se nos viene encima con la nueva máquina del BSC. Hemos recibido varios rumores e información contradictoria: Power 7, Blue Gene/P y la última es Intel Nehalem con aceleradoras Nvidia Fermi.
El tema de las tarjetas aceleradoras en supercomputación es ya recurrente y empieza a ser cansino así que, en vez de simplemente decir que a los que hacemos turbulencia no nos hace especial ilusión, voy a demostrarlo con números.
De manera simplificada se puede decir que cualquier algoritmo se basa en mover memoria al procesador, realizar cálculos en él y devolver el resultado. Es una simplificación grosera de la arquitectura de von Neuman pero nos servirá para entender las cuentas.
Entonces el tiempo de cálculo total tc es igual al tiempo necesario para mover los datos al procesador mas el tiempo necesario para realizar los cálculos. El primero será proporcional al número de datos almacenados dividido por el ancho de banda de acceso a memoria y el segundo será igual a las operaciones necesarias dividido por el número de operaciones en coma flotante por segundo.
Para entenderlo un poco mejor los argumentos adimensionalizaremos el tiempo total con el tiempo característico de la memoria:
C/N es el número de operaciones dividido por la memoria utilizada y BW/Flops la relación entre el ancho de banda de memoria y la potencia de cálculo del procesador. Históricamente BW/Flops ha estado siempre sobre el 0.1 en arquitecturas no aceleradas pero en una aceleradora alcanza valores de entre 10-3 y 10-4.
En lo que respecta al primer término depende en gran medida del algoritmo que requiera más tiempo de cálculo y siempre es una función de N. Por ejemplo, una transformada rápida de Fourier es N log N, multiplicar una matriz llena por un vector es N (cuidado porque muchos se confunden con esta operación, N no es el número de incógnitas sino la memoria almacenada; la matriz también hay que ponerla en algún sitio), resolver un sistema lineal de ecuaciones es N2... Un canal turbulento es más o menos N log N porque lo que mandan son las transformadas de Fourier. Los códigos de mecánica de fluidos están entre el N, el N log N y, en menor medida, N2. Minimizar un funcional para plegar una proteína está en N3. Entonces el término C/N es, para nuestro caso, log N. Teniendo en cuenta que la memoria de un nodo está sobre los 2 y los 8 GBi, log N está sobre 10 (siempre hablando de órdenes de magnitud).
Si nos sacamos la cuenta de (C/N)(BW/Flops) para un Blue Gene (o cualquier otro cluster Beowulf convencional) nos de algo parecido a 1, τc~ 2 y no estemos tirando hardware. Si utilizáramos aceleradoras esta cuenta nos saldría 0.01 con lo que τc ~ 1.01. Ahora pensaréis que 1.01 es menor que 2 pero esta cifra hay que multiplicarla por el N/BW que es entre 5 y 10 veces mayor en en las plataformas aceleradas. Lo único que dicen estos números es que, hagamos lo que hagamos, el tiempo característico de la memoria es el que manda y la prioridad debe ser aumentar BW. En estos casos la tarjeta se utiliza como una unidad vectorial más y quien realiza la mayor parte del trabajo es el procesador que tiene mayor BW.
Las tarjetas aceleradoras son interesantes cuando C es del orden de N2 o mayor, entonces (C/N)(BW/Flops) será siempre mucho mayor que uno, el tiempo de la memoria será despreciable y cualquier mejora en la relación (BW/Flops) será bienvenida.
Aún así, y por desgracia, no es el caso de la turbulencia y la mecánica de fludos computacional. Una cosa está clara, si hay que usar aceleradoras se usarán.
