viernes, 17 de junio de 2011

Los herederos de ENIAC (II)

Ya han transcurridos casi 20 años desde que DEC lanzara al mercado el primer miembro de su familia de procesadores Alpha. En 1992, mientras el Intel 80486 era el rey absoluto de los ordenadores personales -con sus asombrosos 50 Mhz-, el primer miembro de la familia Alpha, el 21064, salió al mercado con sus flamantes (e increíbles) 150 Mhz. Era un procesador claramente RISC, capaz de leer dos instrucciones por ciclo y ejecutarlas de forma paralela en sus 4 unidades funcionales si no había dependencias entre ellas.


La familia Alpha brillaría con luz propia en los 90 (fue el corazón de la familia Cray T3E, primera máquina en alcanzar el teraflop) pero moriría tras la adquisición de DEC por Compaq (y la de Compaq por parte de HP posteriormente). El 21364 fue, hacia 2004, el último integrante de la familia en ser producido.

Casi 30 años separan al 21064 de la familia 6000 de Control Data Corporation. Es difícil imaginar que apenas 15 años después de la construcción de ENIAC un procesador de aquella época fuera capaz de ejecutar instrucciones en paralelo de igual forma que hacía el 21064.


El CDC 6600 fue una máquina refrigerada por freón, tenía una velocidad de reloj de 10 Mhz, ejecutaba unos 3 millones de instrucciones por segundo y tenía algo menos de 1 Megabyte de memoria principal.

Módulo de circuitería del CDC 6600

La característica más interesante que estaba encerrada en sus 400.000 transistores era la capacidad de ejecutar instrucciones en paralelo de un programa. Para ello, el 6600 dividía su circuitería en unidades independientes que podían operar de forma autónoma. El 6600 disponía de 10 unidades independientes.

En el siguiente ejemplo extraído de un manual de la época, vemos gráficamente como el procesador sacaba partido al paralelismo existente en los programas:

Cálculo a realizar

Cálculo secuencial

Cálculo en el CDC 6600

Vemos que el cálculo secuencial, empleando los tiempos reales de computación en el 6600, son de 7.1 microsegundos. En cambio, empleando un código optimizado, vemos que el tiempo baja hasta los 4.3 microsegundos lo que representa una ganancia aproximada del 40%.

Para determinar que instrucción puede o no ejecutarse, el 6600 tenía una circuitería específica (llamada marcador o unidad de reserva) dedicada a decidir que instrucciones podían ser ejecutadas en cada ciclo de reloj.

Esquema del marcador

El marcador chequea una serie de criterios antes de empezar a ejecutar una instrucción, si alguno de los criterios no se cumple, la instrucción debe esperar. Los criterios se basan en detectar las dependencias o conflictos que pudiera tener una instrucción al iniciar su ejecución:
  1. Conflicto por una unidad funcional
  2. Conflicto por destinatario de la instrucción
  3. Conflicto de lectura
  4. Conflicto de escritura
De forma más gráfica, con un ejemplo, vemos más claramente los conflictos:

Por si no fuera suficiente, el 6600 también ofrecía un mecanismo de ejecución concurrente de programas (hasta 11 a la vez) y ofrecía concurrencia en los accesos a memoria ya que su megabyte de memoria principal estaba dividido en 32 bloques por lo que, el acceso a bloques diferentes no provocaba bloqueos.



Hoy las máquinas de la serie 6000 de CDC ya sólo pueden ser vista en museos o en libros pero las ideas que las convirtieron en las más rápidas de su época siguen siendo empleadas hoy en día. El 6600 es una prueba más de que aquellos armatostes escondían sorprendentes características en su interior.

1 comentario:

  1. Me has trasladado a aquellas tardes de arquitectura en la facultad!!! Y he recordado cuando el Joselillo reseteo a fuego un alpha!! Vaya regañá que se llevó y que pechá de reír nos dimos luego.

    ResponderEliminar