Teramac:
el ordenador minusválido
De los 864 FPGA utilizados solamente 217 estaban libres de defectos, el 75% restante tenían uno u otro tipo de errores de fabricación y debido a que el fabricante los había tirado a la basura resultaron totalmente gratis. El 50% de los MCM (multichip modules) utilizados para conectar los diferentes FPGA también contenían defectos y por tanto también resultaron gratis. El 10% de las puertas lógicas no funcionaban y el 10% de las líneas de comunicaciones entre chips también contenían errores. En total se detectaron 220.000 errores de hardware en el Teramac una vez que se completó su fabricación y se realizaron las respectivas comprobaciones.
Ahora bien, ¿cómo puede un ordenador funcionar con 220.000 defectos de hardware? La respuesta está en la arquitectura en la que se basa Teramac. Esta arquitectura se fundamenta en los árboles densos. De manera general, en programación un árbol es una estructura de datos formada por nodos conectados entre sí, de tal manera que cada nodo sólo puede comunicarse directamente con sus nodos hijos y con su nodo padre. Los más utilizados comúnmente son los árboles binarios, en los que cada nodo padre tiene sólo dos nodos hijos, aunque estos árboles tienen una serie de características ventajosas para ciertas tareas, también tienen un serio problema y es que si se interrumpe una línea de comunicación entre un nodo y su padre, todos los nodos hijos de esa rama se quedan incomunicados. También tienen el problema de que nodos hermanos tienen que hablar primero con el padre para hablar entre sí. Un árbol denso es aquel en el que el número de líneas de comunicación es mucho más elevado, de tal manera que los nodos se encuentran conectados por muchas líneas redundantes y los nodos hermanos también se encuentran conectados entre sí. De esta forma, si una o varias de las líneas de conexión fallan, siempre se puede encontrar un camino alternativo.
Tras construir Teramac, hubo que probar y determinar cuáles eran las piezas que no funcionaban, para ello, y con ayuda de una workstation conectada al mismo se fue analizando mediante una serie de pruebas cuáles eran las conexiones y las unidades de proceso que eran defectivas. Con esta información se construyó una base de datos de todos estos errores.
Una vez que se sabe qué piezas no funcionan, hay que determinar cuál es el tipo de ordenador que queremos. En otras palabras, tenemos que definir qué unidades conectar entre sí por aquellos caminos que hemos comprobado que funcionan. Evidentemente son casi infinitas las posibles variantes que podemos definir, y el conflicto se asemeja a un problema muy conocido en la teoría de Investigación Operativa, el problema del viajante: dado un conjunto de ciudades conectadas entre sí por una red de carreteras, en general redundantes, ¿cuál es el camino más óptimo que debe realizar un viajante para visitar todas las ciudades y emplear el menor tiempo y/o gasolina en realizarlo?
El problema al que se enfrentaron los desarrolladores de Teramac es del mismo estilo. Una vez que se conocen los caminos que funcionan y las unidades lógicas que funcionan, hay que saber cómo hay que conectarlas para que las señales entre procesadores viajen lo más rápidamente posible y dando el menor número de saltos entre nodos. El problema se complica por el hecho del elevado número de conexiones y por el elevado número de unidades lógicas (cerca de un millón). No existe una solución perfecta a este problema pero sí existen numerosas aproximaciones que nos darán un conjunto de conexiones razonablemente bueno. Una vez que se decide la arquitectura hay que "implantar" dicha arquitectura por medio del compilador. Esto se realiza con una sola instrucción de software (la famosa instrucción de 300 Mbits). Una vez que se ha configurado correctamente el Teramac ya pueden ejecutarse los programas.
El compilador utilizado para compilar los programas hará uso de la base de datos de errores y de la configuración decidida para determinar el orden de ejecución de las instrucciones y a la hora de decidir qué instrucción será ejecutada por qué procesador. Así pues, dependiendo del tipo de configuración empleada, el código generado para el mismo programa será completamente diferente.
Teramac se ha utilizado
para ejecutar problemas de computación intensivos como es la
creación de un mapa tridimensional de las arterias en el cerebro
humano a partir de los datos de imagen de resonancia magnética
nuclear. Se ha utilizado también en una configuración
de hipercubo para generar gráficos en tiempo real.
|