Volver a empezar, el eterno retorno…

Archivo para la Categoría "Arquitecturas"

Cómo no desperdiciar recursos: BOINC

Hay veces en la vida que las cosas salen solas, caen por su propio peso…
Ese es el caso de las aplicaciones masivamente paralelas y la computación de escritorio.

Introducción

Durante muchos años, debido a la manera en la que iba creciendo el rendimiento de los sistemas de cómputo, las aplicaciones masivamente paralelas han estado condenadas a ejecutarse en centros de cálculo relativamente cerrados y que disponían de una capacidad de cómputo limitada (no porque ésta fuese pequeña, sino porque había un límite de presupuesto/máquinas/energía/tecnología o una combinación de estos factores).

Por naturaleza, los problemas altamente paralelizables, debido a su bajo acoplamiento, disfrutan de unas características que les hacen posible ejecutarse en lotes, con pocos o ningún problema de dependencias de datos dentro de cada lote de trabajo.

Habitualmente estos problemas se dividen en tres grandes fases: creación del lote de trabajo, cómputo del lote de trabajo, integración de los resultados del lote para conseguir un resultado global. Cuando estos problemas se pueden diseñar de manera que el cómputo del lote de trabajo sea especialmente importante en cuanto a tiempo de cálculo, estos problemas son especialmente paralelizables y se benefician al máximo de la disponibilidad de unidades de cálculo.

El gran avance de la computación doméstica, con ordenadores tremendamente potentes (cuando empecé a programar tenía un 8088 a 4,77Mhz, con un disco duro de 20Mb, hoy en mi bolsillo llevo un procesador ARM9 de 1000Mhz y una memoria de 16000Mb, y en un ordenador de escritorio hay más, mucho más), que parecen centros de cálculo de hace 20 años, se abre un nuevo mundo de posibilidades para las aplicaciones masivamente paralelas.

El concepto básico aquí es tener un centro de datos donde se realizan principalmente la primera fase de creación de lotes de trabajo y la última fase de integración de resultados, dejando a máquinas más modestas (nuestros PC de sobremesa, la PS3, incluso los teléfonos móviles) el trabajo de procesar los distintos lotes de trabajo y devolver los resultados al centro de datos cuando se complete la tarea asignada.

Siguiendo esta filosofía han aparecido multitud de proyectos, siendo uno de los primeros en adquirir renombre el de la rotura del algoritmo de encriptación DES3. Para romper el algoritmo DES, la EFF desarrolló un ordenador especial llamado DES Cracker. Dado que el algoritmo DES3 aumentaba considerablemente el espacio de claves, DES Cracker se programó para que ordenadores personales de la época (1999) pudiesen ayudarle a procesar posibles claves para romper el algoritmo DES3.

Placa del DES Cracker

El algoritmo se rompió en menos de 24 horas, lo que marcó un hito en este tipo de aplicaciones, ya que se demostró que con muchos pequeños clientes y un ordenador central se podían realizar tareas inmensamente grandes (que antes se pensaba que no se podrían realizar en un tiempo razonable)

De esta manera se empezó a abrir la puerta a este tipo de computación distribuída donde se repartían trabajos de problemas altamente paralelizables sobre multitud de «pequeñas» máquinas (las cuales corrían a cargo del usuario propietario, y no del usuario que plantea el problema a resolver, lo cual también es una ventaja en cuanto a costes)

Y así llegamos a SETI@Home y su salvapantallas:

Y es que no hay nada mejor para vender algo que hacer que entre por los ojos, y eso mismo debieron pensar los chicos de SETI@home, pues el problema para que este tipo de arquitectura funcione es que hay que convencer a los usuarios de que dejen sus ordenadores trabajando para el proyecto cuando no hacen otra cosa (y eso cuesta dinero). Y dado que la computación de lotes de problemas altamente paralelos es muy aburrida, se les ocurrió dar algo a cambio: un sistema de méritos (para interacción social y a mayor gloria del usuario) y algo bonito que ver en pantalla (que parezca que lo que haces es megachipirifláutico).

Esta idea ha sido posteriormente adoptada por multitud de proyectos de computación distribuída, con gran éxito.

El sistema de méritos se basa en asignar una serie de unidades (que pueden llamar créditos, dependiendo del sistema, ticks, tickets, etc…) según se completan los lotes asignados. Cada lote a procesar tiene un «tamaño» de cálculo estimado, y cuando se completa el lote, se en base al tamaño estimado y al real computado se asigna la puntuación.

Cada sistema tiene el suyo, y yo me centraré aquí en BOINC.

BOINC

Boinc (Berkeley Open Infraestructure for Network Computing) es una infraestructura con un cliente instalable desarrollada por la universidad de California (más info), que si bien fue desarrollada inicialmente para el proyecto SETI@home, con posterioridad ha sido generalizada y es utilizada actualmente por multitud de proyectos, pudiendo crear proyectos nuevos sin ningún problema.

¿Y cómo de potente es BOINC?

Me alegro de que me haga esa pregunta, caballero: La gran duda en todos los sistemas de computación es hasta qué punto aprovechan sus capacidades (en este caso cálculo pico en FLOPS). En los centros de cálculo se tiene una capacidad más o menos estable durante un tiempo determinado, pero en los entornos como BOINC esa capacidad fluctua debido a las idas y venidas de los usuarios, la heterogeneidad de los ordenadores conectados a la red, la diferencia de carga de los lotes a procesar, etc.

Para poder ver cómo de potente es BOINC primero hay que establecer un estándar de medición. En BOINC ese estándar ha variado (a día de hoy) 3 veces.

El cálculo actual de la capacidad de cómputo para un cliente de BOINC viene dado actualmente por lo siguiente (referencia):

Cada crédito ganado por un usuario se calcula como la 1/200 parte del trabajo que realiza un ordenador de 1000 FLOPS en un día. De esta forma, si nuestro ordenador consigue 200 créditos en 1 día, tendremos un ordenador con una potencia de 1000 FLOPS.

Este cálculo es sencillo, pero teniendo en cuenta que nuestro ordenador puede estar entrando y saliendo de BOINC, que lo apagamos, etc, el cálculo pierde valor. Por ello, desde Boinc se aconseja que para calcular la potencia de nuestro ordenador se utilice en RAC (recent average credit) asignado a nuestra máquina, el cuál se calcula en un determinado espacio de tiempo (normalmente es de 1 día).

Al utilizar el RAC la fórmula de cálculo cambia, y nos queda como GFLOPS = RAC/200.

Hay que remarcar que como la fórmula de cálculo ha sido alterada en varias ocasiones, esta fórmula sólo es válida para datos actuales, para datos actuales qué mejor que  saber cuántos GFLOPS está dando el sistema ahora mismo (siendo estos la suma de todo lo invertido en todos los proyectos disponibles) por paises

¿Y las tarjetas gráficas?

Pues las tarjetas gráficas, como no podía ser de otra manera, se lucen en este tipo de entornos, y para muestra un botón: http://foldingforum.org/viewtopic.php?f=43&t=3193&st=0&sk=t&sd=a&start=420#p38094

En el enlace anterior se puede apreciar el rendimiento de distintas tarjetas nVidia para los distintos proyectos.

En la dirección http://www.gpugrid.net/forum_thread.php?id=1150 se encuentra un resumen con GFLOPS que están rindiendo las GPU en BOINC

Según algunos usuarios, han pasado de generar unos 14 créditos por hora a 180 gracias al uso de una tarjeta gráfica nVidia 8800 GTX

Y además de SETI@home ¿qué otros proyectos se pueden encontrar?

En general cualquier proyecto que incluya la búsqueda de patrones suele ser altamente paralelizable, por lo que en Boinc se puede encontrar multitud de proyectos: de medicina, ingeniería, ciencia pura…

Un proyecto que me ha parecido interesante por el caracter local que tiene es IberCIVIS, si bien el que está despuntando en estos momentos es el proyecto sobre la vía láctea: http://milkyway.cs.rpi.edu/milkyway/