nace un monstruo
Todo empezó a principios de este milenio, cuando Intel estaba luchando en la carrera de los megahercios (en breve gigahercios) contra AMD. Sus ingenieros, presionados por la gerencia para romper la barrera de los 2 GHz cuanto antes, salieron con un diseño monstruoso: pipelines de 5 y más pasos, un montón de unidades de procesamiento interno, un consumo energético brutal (los 60 W no eran raros ni siquiera al principio, como una bombilla potente; hoy día es difícil librarse de los 100 W) y una disipación de calor desmesurada. Pero así podían cumplir con los deseos del departamento de marketing: más gigahercios.
Los primeros Pentium 4 fueron un desastre: iban peor que la anterior generación de Pentium 3 a la misma velocidad. Sin embargo, ocuparon el espacio y siguieron durante un tiempo forzando la máquina para subir de velocidad, contra las limitaciones cuánticas que inevitablemente acabarían deteniendo la carrera de velocidad de reloj. Dado el enorme peso de Intel, bastaba con desfasar la familia anterior y dejar que los Pentium 4 coparan el mercado.
Mientras tanto, en AMD respondieron de otra manera a la presión. En lugar de subir los megahercios reales, los del departamento de marketing se dieron cuenta de que bastaba con subir el numerito: así, el Athlon 1700+ iba en realidad a 1470 MHz, mi amd64 3200+ va a 2 GHz... es un timo, en realidad, pero en la práctica menos dañino que el engendro de Intel.
correr para no moverse
Hoy día, curiosamente, en Intel siguen haciendo los procesadores más rápidos que nadie... pero es mucho correr para seguir en el mismo sitio. ¿Cómo es posible que un procesador que va más rápido sea luego más lento?
Para comprenderlo es necesario entrar un poco en cómo funciona un procesador. La "velocidad" anunciada no es tal en realidad, sino una frecuencia; de ahí que se mida en hercios (Hertz o Hz, oscilaciones por segundo). Se trata de una oscilación que controla los golpes de corriente que formarán las unidades de proceso (los bits). En cada golpe, si no hay corriente será un "0", con corriente cuenta como un "1".
a qué velocidad va un electrón
Un procesador moderno tiene millones de transistores o "puertas lógicas"; cada puerta realiza una operación con los electrones. (Para ser exactos, los golpes de corriente lo que hacen es imprimir movimiento a los electrones de un material.) Por supuesto, una operación no puede comenzar hasta que los electrones de la corriente anterior han terminado de pasar por la puerta. Los electrones van siempre a velocidad finita, menor que la velocidad de la luz; y cuanto más grande la puerta, más se tarda en recorrerla. De ahí que la miniaturización haya permitido que cada vez haya más golpes de corriente (hercios) por segundo.
Pero la segunda parte de las operaciones por segundo que realiza un procesador consiste en atravesar todas las puertas necesarias y producir el resultado pedido. Antiguamente la unidad aritmético-lógica (o ALU) era la encargada de realizar cada operación. Cuando las operaciones se volvieron demasiado complejas para resolverlas de una vez, se añadieron más unidades de ejecución en los llamados diseños super-escalares; además de descomponer las operaciones en subcomponentes y ejecutarlas en tubería o pipeline.
La tubería va llenándose por un extremo de instrucciones, que se van resolviendo paso por paso. Pero ¿qué ocurre cuando hay una toma de decisión, como un if en un lenguaje de programación? En el lenguaje que entiende el procesador, el código máquina, se continúa ejecutando a partir de dos puntos distintos: si la condición es cierta, haz esto; si no, haz esto otro. El procesador habrá llenado la tubería en vano; cuando se salte a la nueva tarea, habrá que vaciarla y empezar a llenarla de nuevo. Y en código máquina estos saltos son muy frecuentes, mucho más que en los lenguajes normales de programación. La predicción de saltos es un intento de los diseñadores de procesadores por estimar por dónde seguirá la ejecución; obviamente no funciona demasiado bien, porque para calcular por dónde seguirá la ejecución es necesario seguir todos los pasos y ejecutar todas las instrucciones.
Podemos ver, intuitivamente, que un procesador a más GHz (mil millones de Hz) y con más pasos en la tubería irá más rápido en teoría, pero en la práctica tanto llenarla y vaciarla acabará pasando factura. Un diseño más limpio y más honesto será más eficiente con los Hz (los golpes de corriente) y podrá tener un rendimiento similar. El término "velocidad" no deja de ser una metáfora; los electrones no van más rápido al aumentar los GHz.
sucumbiendo a Moore
El fundador de Intel, Gordon Moore, predijo en 1965 en su famosa Ley que el número de transistores en un chip se duplicaría cada año y medio. Esto implicaba reducir su tamaño; y durante mucho tiempo esto posibilitó también aumentar las frecuencias de reloj en la misma proporción, ya que cada golpe de corriente tardaba menos en pasar por las puertas lógicas.
Sin embargo, era imposible continuar eternamente como el increíble hombre menguante: eventualmente se alcanzarían los límites de la electrónica clásica. Allá por el año 2000 la pequeña escala que se había conseguido hacía que los fenómenos cuánticos comenzaran a manifestarse: por ejemplo el efecto túnel o las irregularidades en la corriente debidas al escaso número de electrones. Pero no se trataba sólo de fluctuaciones nanoscópicas: a su vez tenían consecuencias a nuestra escala muy visibles, en forma de calor disipado. Los electrones que perdían el camino correcto, las famosas fugas de corriente, dejaban su energía en forma de calor; aumentando por un lado el consumo del procesador (los electrones que se le enchufan por segundo, o para ser más exactos la fuerza con la que van esos electrones) y por otro el calor a disipar (la fuerza sobrante se convierte en calor).
por fin, los 64 bits
Los restantes fabricantes de procesadores, aparte de jugar a trucos de marketing con la "velocidad" anunciada, tomaron la ruta contraria a Intel: simplificar los diseños lo más posible, con vistas a aprovechar mejor los preciosos MHz. AMD, IBM; incluso la propia Intel acabaría resucitando la familia de Pentium 3 y evolucionándola hacia el muchísimo más eficiente Pentium M.
En un momento dado se hizo necesario además aumentar los bits procesados por ciclo de reloj, alcanzando los 64 bits. Este momento había llegado ya en 1992 para los procesadores Alpha de DEC, adelantados a su tiempo en todos los sentidos; no fue hasta el 2002 para el G5 de IBM; y en 2003 para AMD y su nuevo juego de instrucciones amd64, quien para entonces había contratado a una parte del equipo de DEC que diseñó los Alpha. Intel cedió en el 2004 y sacó su triste copia EM64T, para irritación de Linus Torvalds. El juego de instrucciones es casi idéntico, pero el diseño interno (y por tanto el rendimiento) es peor.
Es cierto que Intel tenía su propia arquitectura de 64 bits, Itanium, desde 2001. Pero fue un fracaso descomunal: basada en instrucciones de palabra muy largas, era el compilador el que debía colocar las instrucciones para su ejecución en el orden óptimo. Con ello se ahorraban la circuitería dedicada a reordenar las instrucciones para la tubería y para la ejecución superescalar; y con ello el código heredado de 32 bits dejaba de ir a una velocidad razonable. Unido a su altísimo precio, a la dificultad de evolucionar la arquitectura sin provocar terribles pérdidas de rendimiento y a otros factores, los procesadores Itanium han sido un completo fracaso, aceptado implícitamente por Intel al copiar la arquitectura amd64.
la libertad del software, al rescate
El software propietario ha tardado bastante en llegar a los 64 bits. Hasta abril de 2005 y la versión Tiger de Mac OS X, Apple no dispuso de un sistema de 64 bits. La versión de WinXP de 64 bits no está todavía a la venta para los usuarios domésticos.
Sin embargo, Linux se ha adaptado muy bien a la arquitectura amd64. Salvo ciertos elementos de software propietario que dependen de cuándo el fabricante decida sacar una nueva versión (módulos propietarios del kernel para tarjetas gráficas, plugin de Flash, Java de Sun), el resto del software en un sistema GNU/Linux estaba a una recompilación de distancia de ser 64-bit clean: es decir, de ejecutarse completamente en 64 bits. Dado que ya había versiones de Linux y del sistema completo (Debian por ejemplo) para otros procesadores de 64 bits desde hace años, el código estaba preparado; además, los ingenieros de AMD se aseguraron de hacer funcionar el compilador gcc
. Linux era muy importante para la familia Opteron, donde debutó la arquitectura: estaba orientada al mercado de servidores y a la computación de alto rendimiento, sitios donde GNU/Linux no tiene rival actualmente (como reconoce hasta Microsoft).
Actualmente existen distribuciones para amd64 (también conocida como x86-64) de Debian (no oficial), Ubuntu, SUSE, Red Hat, Gentoo y Mandriva, al menos. Es difícil saber el mercado exacto que tienen; por un lado la familia Opteron lleva tiempo en el mercado de servidores, y hasta Sun la ha adoptado como suya; por otro, el mercado doméstico parece ir más lento. Recientemente nos hemos enterado de que AMD ha aumentado su cuota de mercado un 50%. Dado que todos sus procesadores actuales son de 64 bits, parece que la arquitectura se está volviendo bastante popular. El hecho de que las distribuciones más importantes la hayan adoptado tan rápidamente lo confirma.
Hasta que los fabricantes produzcan versiones de 64 bits de sus productos, el software libre tendrá una ventaja considerable que debemos aprovechar.