Gobiernos e instituciones de investigación de todo el mundo utilizan las supercomputadoras para resolver algunos de los problemas más complejos de la ciencia, como el estudio de moléculas para tratamientos contra el cáncer, el modelado de armas atómicas o la predicción del tiempo (aunque en esto queda mucho por hacer aún 😋). En la mayoría de los casos, un superordenador es en realidad un clúster de computación que se compone de cientos o miles de ordenadores individuales que están conectados entre sí y controlados por software especial. Cada nodo del clúster está ejecutando procesos similares en paralelo, pero cuando se combina toda su potencia de cálculo se termina con un sistema que es mucho más potente que cualquiera de sus partes por sí mismas.
Este tipo de monstruos de la súper-computación generalmente ocupan un espacio enorme. Por ejemplo, el más potente en la actualidad (julio de 2018) se llama Summit, del Departamento de Energía de EEUU. Ubicado en Tennessee, es capaz de alcanzar los 200 Petaflops (200 trillones de cálculos por segundo, Whaaaat?). Sus 4.608 servidores ocupan el equivalente a dos pistas de tenis, y es una bestia consumiendo energía y agua para refrigeración.
Bueno, lo que os vamos a contar hoy en la sección no llega ni de lejos a la capacidad de cálculo de Summit, pero lo interesante del asunto es que se basa en los mismos principios que éste para conseguir el paralelismo. El desarrollador chino Wei Li ha creado una prueba de concepto que permite construir un "supercomputador" a escala usando chips de microcontrolador de tipo ESP32 que cuestan sobre 7 dólares. Estos chips se parecen a un Raspberry Pi, pero son mucho más baratos. Y esta es su ventaja frente a otros proyectos similares hechos con Raspberry Pi: que si quieres hacer crecer el clúster te vas a ahorrar un dineral, porque la cosa enseguida empieza a sumar. Por ejemplo, por el precio de un solo Raspberry Pi, puedes construir un clúster de ESP32 que tiene el triple de cores funcionando para hacer cálculos.
Aparte de seleccionar el hardware e interconectarlo de la manera adecuada, el mayor reto del proyecto fue coordinar estas CPUs para que hicieran su trabajo paralelizando tareas. Para ello Li utilizó un producto llamado Celerity que está diseñado precisamente para eso: sincronizar la ejecución de tareas entre varios cores.
Todo el desarrollo está en Github. Además ha liberado varios ejemplos prácticos en funcionamiento dentro de su canal de YouTube. Por ejemplo, en este vídeo muestra cómo se usan tres nodos para contar a toda velocidad y en paralelo los caracteres de un documento muy grande:
Sin duda algo poco interesante pero que demuestra como el sistema permite repartir tareas y sincronizar su ejecución paralela entre un número arbitrario de nodos que podemos añadirle. Desde luego no vamos a competir con un supercomputador de verdad, pero sí que permitiría hacer cosas interesantes con ejecución paralela en un hardware que cuesta prácticamente nada. Y desde luego es una manera estupenda de aprender de primera mano el funcionamiento de un supercomputador de verdad.