El superordenador planetario

Hay ciertos programas cuyas necesidades de cálculo superan a la capacidad de los grandes superordenadores actuales: la predicción meteorológica, la búsqueda de inteligencia extraterrestre mediante en análisis de señales de radio procedentes del espacio, la predicción de la estructura de las proteínas a partir de una secuencia de aminoácidos, etc.

¿Qué haría usted si tuviera que resolver un problema de grandes dimensiones? Piense un poco. Hay, por lo menos, tres maneras de enfrentarse a él:

  1. Tratar de idear un algoritmo que lo resuelva pero que sea más simple, o que se ejecute en menos tiempo, que los conocidos hasta ahora.

  2. Tratar de construir ordenadores más rápidos.

  3. Tratar de repartir la tarea entre varios ordenadores, para que cooperen en la resolución del problema.

No lo duden: estos superproblemas son atacados por todos los frentes. Hoy hablaremos del último de ellos.

Trabajar en grupo


Digamos que para terminar cierta tarea en solitario necesito emplear un tiempo T. Si me busco a un amigo que me ayude, entre los dos la terminaremos en un tiempo T/2.

O no.

Cualquiera que haya trabajado en grupo sabe que el mundo real no funciona así. Cuando varias personas cooperan, no todos avanzan al mismo ritmo. Algunos saben más del asunto y van más rápido. Otros trabajan más despacio y se distraen con facilidad. Los más rápidos tienen que esperar a los lentos. Hay que revisar el trabajo de todo el mundo. Hay que perder tiempo repartiendo el trabajo y coordinando los resultados. Encima, siempre acaban surgiendo rencillas y acaba uno empelando más tiempo discutiendo que trabajando. En fin, un desastre.

De modo que mi amigo y yo no tardaremos un tiempo T/2 en terminar la tarea, sino algo más. Y si me busco a tres amigos, entre los cuatro no tardaremos T/4, sino algo más. El número por el que conseguimos dividir T se denomina ganancia. Con dos personas, la ganacia ideal es 2, pero nunca se alcanza. Aunque con una ganacia próxima al ideal (como 1,8 o 1,9) ya estaremos reduciendo el tiempo considerablemente. Con cuatro personas, la ganancia real se alejará todavía más de la ideal (que es 4), y se quedará en 2,8, en 3 o en 3,6. Aún así, sigue siendo una mejora notable.

Cuanto mayor es el grupo, más se aleja la ganancia real de la ideal. Hasta que llega un momento crítico en el que la ganancia no crece más o, incluso, comienza a decrecer. Quizás 20 personas obtengan una ganancia de, digamos, 10. Si añadimos más personas al grupo, el tiempo que se pierde en coordinar, repartir y discutir no deja de crecer, de modo que la ganancia se estabiliza en 10 y, poco después, empieza a desplomarse. Imaginen lo que sería un grupo de 1000 personas intentando resolver un problema a la vez (por supuesto, la cantidad de gente óptima depende de la naturaleza del problema y de cómo organicemos al grupo)

Pero es curioso que, a pesar de todo, todas las grandes empresas de la humanidad han sido colaborativas. Moraleja: necesitamos colaborar para resolver problemas complejos, a pesar de los desafíos que eso supone.

Computación distribuida


Con los programas de ordenador podemos hacer lo mismo. Si el programa es tan complejo (o maneja tal cantidad de datos) que tarda una eternidad en encontrar una solución, podemos intentar repartir el algoritmo, o los datos, o ambas cosas, entre unos cuantos ordenadores. Cada uno hará su parte, y todas las partes se ensamblarán más tarde para obtener la solución completa. A esto se le llama computación distribuida (un término relacionado con la computación paralela, aunque no son exactamente lo mismo) y plantea un ingente montón de interesantes problemas para resolver, que son el equivalente computacional a los problemas de coordinación de los grupos humanos. Entre otros, éstos:

¿Cómo repartimos los algoritmos?

¿Cómo repartimos los datos?

¿Qué pasa si uno de los ordenadores necesita usar un dato que está en otra máquina?

¿Cómo conectamos físicamente los ordenadores?

¿Cómo coordinamos a los ordenadores participantes?

¿Cómo recogemos y ensamblamos los fragmentos de solución?

¿Quién coordinará el reparto y el ensamblaje? ¿Será un único ordenador (solución parcialmente centralizada) o el problema de la coordinación también se solucionará entre los ordenadores participantes (solución completamente distribuida)?

El superordenador planetario: BOINC


En la Universidad de Berkeley tuvieron una idea. Tenemos millones de ordenadores conectados a internet, ¿no? Muchos de esos ordenadores se pasan mucho tiempo encendidos pero ociosos, con simpáticos salvapantallas consumiendo CPU mientras sus usuarios están tomando café, chateando con el teléfono o vaya usted a saber qué. ¿Por qué no utilizar esa superred de ordenadores para construir el sistema distribuido más grande del mundo? Para no mosquear a los dueños de los ordenadores, sus máquinas sólo contribuirán al sistema distribuido mientras estén ociosas.

Ese proyecto ya existe y se llama BOINC. Se trata de un software libre que, tras ser instalado, toma el control de la máquina mientras el usuario no la utiliza, y realiza una parte mínima de los cálculos necesarios para resolver algunos de los grandes problemas que mencionábamos al principio. BOINC permite repartir el trabajo de cómputo entre un número indefinido de ordenadores, de modo que, virtualmente, todas las máquinas conectadas a internet podrían contribuir con su capacidad de cómputo. BOINC implementa así un superordenador distribuido a escala planetaria sin necesidad de invertir ni un euro (o ni un dólar) en infraestructura adicional.

Cuando un ordenador de la red ha resuelto su pequeña parte del problema, envía los resultados a través de internet a los servidores de la Universidad de Berkeley, que los recogen y ensamblan con los resultados provenientes del resto de colaboradores. Después, envían los datos de otro fragmento del problema para que el nuestro modesto ordenador pueda continuar participando en la resolución del mismo.

Para participar con nuestro ordenador doméstico en cualquiera de los proyectos activos, basta con instalar el programa BOINC en nuestro equipo y ejecutarlo. La primera vez, habrá que seleccionar uno o varios proyectos a los que deseamos unirnos.

He aquí una muestra de los proyectos en los que puede participar si instala BOINC en su ordenador:

  • SETI@Home: búsqueda inteligencia extraterrestre mediante en análisis de las señales de radio procedentes del espacio (este fue el proyecto originario a partir del cual surgió BOINC)

  • Climate Prediction: evaluación de modelos climáticos para la predicción meteorológica y otras predicciones a más largo plazo, como el efecto del incremento del CO2 sobre el clima.

  • Einstein@home: búsqueda de estrellas de neutrones a partir de los datos de los detectores de ondas gravitacionales.

  • Monte Carlo: estudio de la estructura de diferentes moléculas usando la mecánica cuántica.

  • Lattice Project: estudio de secuencias de ADN y de secuencias de proteinas de diferentes bacterias y virus.

  • Tanpaku: predicción de la estructura y función de las proteinas a partir de secuencias genéticas utilizando dinámica browniana.

(Para una relación completa de los proyectos disponibles, haga clic aquí)

Hay muchos otros proyectos de computación distrubuída similares patrocinados por otros organismos, algunos tan antiguos como GIMPS (que se lanzó en 1996), otros tan recientes como DENIS@home (lanzado en abril de 2015), otros abandonados como el entrañable ideologias@home apadrinado por la Universidad Complutense de Madrid. Muchos de ellos se basan en BOINC, otros no. Aquí encontrará una lista completa, por si desea que su ordenador, en los ratos libres, contribuya al bien de alguna causa.

Comentarios