Introducción
El 19 de octubre de 1992,
Intel anunció que la quinta generación de su línea
de procesadores compatibles (cuyo código interno era el P5) llevaría
el nombre Pentium en vez de 586 u 80586, como todo el mundo estaba esperando.
Esta fue una estrategia de Intel para poder registrar la marca y así
poder diferir el nombre de sus procesadores del de sus competidores
(AMD y Cyrix principalmente).
Este microprocesador se presen
tó el 22 de marzo
de 1993 con velocidades iniciales de 60 y 66 MHz (112 millones de instrucciones
por segundo en el último caso), 3.100.000 transistores (fabricado
con el proceso BICMOS (Bipolar-CMOS)
de 0,8 micrones), caché interno de 8 KB para datos y 8 KB para
instrucciones, verificación interna de paridad para asegurar
la ejecución correcta de las instrucciones, una unidad de punto
flotante mejorada, bus de datos de 64 bit para una comunicación
más rápida con la memoria externa y, lo más importante,
permite la ejecución de dos instrucciones simultáneamente.
El chip se empaqueta en formato PGA (Pin
Grid Array) de 273 pines.
Como el Pentium sigue el
modelo del procesador 386/486 y añade unas pocas instrucciones
adicionales pero ningún registro programable, ha sido denominado
un diseño del tipo 486+. Esto no quiere decir que no hay características
nuevas o mejoras que aumenten la potencia. La mejora más significativa
sobre el 486 ha ocurrido en la unidad de punto flotante. Hasta ese momento,
Intel no había prestado mucha atención a la computación
de punto flotante, que tradicionalmente había sido el bastión
de las estaciones de ingeniería. Como resultado, los coprocesadores
80287 y 80387 y los coprocesadores integrados en la línea de
CPUs 486 DX se han considerado anémicos cuando se les compara
con los procesadores RISC (Reduced Instruction
Set Computer), que equipan dichas estaciones.
Todo esto ha cambiado con el Pentium: la unidad de punto flotante es
una prioridad para Intel, ya que debe competir en el mercado de
Windows NT con los procesadores RISC tales
como el chip Alpha 21064 de Digital Equipment Corporation y el MIPS
R4000 de Silicon Graphics. Esto puede ayudar a explicar
por qué el Pentium presenta un incremento de 5 veces en el rendimiento
de punto flotante cuando se le compara con el diseño del 486.
En contraste, Intel sólo pudo extraer un aumento del doble para
operaciones de punto fijo o enteros.
El gran aumento de rendimiento
tiene su contraparte en el consumo de energía: 13 watt bajo la
operación normal y 16 watts a plena potencia (3.2 amperes x 5
volt = 16 watts), lo que hace que el chip se caliente demasiado y los
fabricantes de tarjetas madres (motherboards) tengan que agregar complicados
sistemas de refrigeración.
Teniendo esto en cuenta, Intel puso en el mercado el 7 de marzo de 1994
la segunda generación de procesadores Pentium. Se introdujo con
las velocidades de 90 y 100 MHz con tecnología de 0,6 micrones
y Posteriormente se agregaron las versiones de 120, 133, 150, 160 y
200 MHz con tecnología de 0.35 micrones. En todos los casos se
redujo la tensión de alimentación a 3.3
volt. Esto redujo drásticamente el consumo de electricidad (y
por ende el calor que genera el circuito integrado). De esta manera
el chip más rápido (el de 200 MHz) consume lo mismo que
el de 66 MHz. Estos integrados vienen con 296 pines.
Además la cantidad de transistores subió a 3'300'000.
Esto se debe a que se agregó circuitería adicional de
control de clock, un controlador de interrupciones avanzado programable
(APIC) y una interfaz para procesamiento dual (facilita el desarrollo
de motherboards con dos Pentium).
En octubre de 1994, un matemático
reportó en Internet que la Pentium tenía un error que
se presentaba cuando se usaba la unidad de punto flotante para hacer
divisiones (instrucción FDIV) con determinadas combinaciones
de números.
Por ejemplo:
962 306 957 033 / 11 010 046 = 87 402.6282027341 (respuesta correcta)
962 306 957 033 / 11 010 046 = 87 399.5805831329 (Pentium fallada)
El defecto se propagó
rápidamente y al poco tiempo el problema era conocido por gente
que ni siquiera tenía computadora. Este bug se arregló
en las versiones D1 y posteriores de los Pentium 60/66 MHz y en las
versiones B5 y posteriores de los Pentium 75/90/100 MHz. Los Pentium
con velocidades más elevadas se fabricaron posteriormente y no
posee este problema. En enero de 1997 apareció una tercera generación
de Pentium, que incorpora lo que Intel llama tecnología
MMX (MultiMedia eXtensions) con lo
que se agregan 57 instrucciones adicionales. Están disponibles
en velocidades de 66/166 MHz, 66/200 MHz y 66/233 MHz (velocidad externa/interna).
Las nuevas características incluyen una unidad MMX y el doble
de caché. El Pentium MMX tiene 4'500'000 transistores
con un proceso CMOS-silicio de 0.35 micrones mejorado que permite bajar
la tensión a 2.8 volt. Externamente posee 321 pines.
Vías
de acceso múltiples
Lo que comenzó con
la técnica del 386/486 de tener vías de acceso múltiples
para la ejecución de instrucciones, se ve refinado en el Pentium
ya que tiene un diseño con doble vía de acceso. El objetivo
de ésta es el de procesar múltiples instrucciones simultáneamente,
en varios estados de ejecución, para obtener una velocidad de
ejecución general de instrucciones de una instrucción
por ciclo de reloj.
El resultado final de la estructura doble vía de
acceso es un diseño superescalar que tiene la habilidad de ejecutar
más de una instrucción en un ciclo de reloj dado.
Los procesadores escalares, como la familia del 486, tienen sólo
una vía de acceso.
Se puede pensar que el microprocesador moderno con vías de acceso
doble es similar a una línea de producción que recibe
en un extremo materias primas sin procesar y a medio procesar y que
saca el producto terminado en el otro extremo. La línea de producción
con vía de acceso doble del Pentium transforma la materia prima
de información y de código de software en el producto
terminado. El Pentium sigue el modelo de vía de acceso del 486,
ejecutando instrucciones simples con enteros en un ciclo de reloj. Sin
embargo es más exacto decir que aquellas instrucciones estaban
en la etapa de ejecución de la vía de acceso durante un
ciclo de reloj. Siempre se requieren ciclos adicionales de reloj para
buscar,
decodificar la instrucción y otros procesos vitales. La secuencia
de funcionamiento de la vía de datos es como sigue: prebúsqueda,
decodificación 1, decodificación 2, ejecución y
retroescritura.
Esto es similar a una línea
de producción que produce un artículo por minuto, pero
que se demora varias horas para completar cada artículo individual,
y siempre habrá una multitud de unidades en diferentes etapas
del ensamblado. En el caso óptimo, las instrucciones estarían
alineadas en la vía de acceso de forma que, en general, ésta
ejecutará aproximadamente una instrucción por ciclo de
reloj.
Los aspectos superescalares
del Pentium dependen de su vía de acceso doble. Los procesadores
superescalares permiten que se ejecute más de una instrucción
por vez. El procesador tiene dos vías de acceso de enteros, una
en forma de U y otra en forma de V y automáticamente aparea las
instrucciones para incrementar la proporción de instrucciones
por ciclo de reloj para que sea mayor que 1. Si el tener múltiples
instrucciones pasando por dos vías suena como el equivalente
de un tranque en el tráfico del microprocesador, eso no es así,
porque hay reglas y restricciones que evitan las colisiones y los retrasos.
Por ejemplo, los conflictos principales que tienen que ver con generar
y ejecutar más de una instrucción al mismo tiempo incluyen
dependencias de información (de un par de instrucciones que se
emiten al mismo tiempo, la información de salida de una se necesita
como entrada de otra, como por ejemplo INC AX, INC AX), dependencias
de recursos (es una situación en la que ambas instrucciones que
fueron emitidas al mismo tiempo compiten por el mismo recurso del microprocesador,
por ejemplo, un registro específico.
Hay técnicas avanzadas
que permiten disminuir estas dependencias pero el Pentium no las tiene)
o saltos en el código (llamadas dependencias de procedimiento).
Si se detectara una dependencia, el procesador reconoce que las instrucciones
deben fluir en orden y asegura que la primera instrucción termine
su ejecución antes de generar la segunda instrucción.
Por ejemplo, el Pentium envía la primera instrucción por
la vía U y genera la segunda y tercera instrucciones juntas,
y así sucesivamente.Las
dos vías no son equivalentes, o intercambiables.
La vía U ejecuta instrucciones de enteros y de punto flotante,
mientras que la vía V sólo puede ejecutar instrucciones
simples con enteros y la instrucción de intercambio de contenido
de registros de punto flotante.
El orden en que viajan las
instrucciones por las vías dobles del Pentium nunca es distinto
al orden de las instrucciones en el programa que se ejecuta. También
tanto las instrucciones para la vía U como la V entran a cada
etapa de la ruta en unísono. Si una instrucción en una
vía termina una etapa antes de que la instrucción en la
otra vía, la más adelantada espera por la otra antes de
pasar a la próxima etapa. Las instrucciones de punto flotante,
comúnmente utilizadas en programas de matemática intensiva,
pasan las vías de entero y son manipuladas desde la vía
de punto flotante en la etapa de ejecución. En definitiva las
vías de enteros y el de punto flotante operan independiente y
simultáneamente.
Dependencias
de procedimiento
Puede ocurrir un problema
potencial con la ejecución debido a las muchas trayectorias que
la secuencia de una instrucción puede tomar. La predicción
de la trayectoria a tomar es el método que debe usarse aquí.
El Pentium dibuja algo parecido a un mapa de carreteras de los lugares
a donde es posible que se dirija la instrucción y lo usa para
tratar de agilizar la ejecución de la instrucción. Intel
afirma que esta característica, por sí sola, aumenta el
rendimiento un 25%.
Sin predecir las trayectorias a tomar, si un procesador superescalar
doble estuviera ocupado procesando instrucciones en ambas vías
de acceso y se encontrara una instrucción de salto que cambiara
la secuencia de ejecución de la instrucción, ambas vías
y el buffer de prebúsqueda de instrucción tendrían
que borrarse y cargarse con nuevas instrucciones, lo que retrasaría
al procesador. Con la predicción de la trayectoria a tomar, el
procesador precarga las instrucciones de una dirección de destino
que haya sido pronosticada de un juego alterno de buffers. Esto le da
al procesador una ventaja para reducir los conflictos y las demoras.
El resultado es una mejor utilización de los recursos del procesador.
Hay dos tipos de instrucciones de salto: condicional e incondicional.
Un salto incondicional siempre lleva el flujo de la instrucción
a una nueva dirección de destino y siempre se ejecuta. Una situación
más incómoda es el salto condicional donde se puede o
no desviar el flujo del programa de acuerdo a los resultados de una
comparación o código de condición y puede incluir
varios tipos de instrucciones.
Cuando no se ejecuta un salto condicional, el programa sigue ejecutando
la próxima instrucción de la secuencia. Muchos programas
tienen de un 10% a un 20% de instrucciones de salto condicional y hasta
un 10% de saltos incondicionales. El porcentaje de veces que se ejecuta
un salto condicional varía de programa a programa, pero es de
un promedio de un 50%. Las instrucciones de lazo o de repetición
hace que se tomen decisiones frecuentemente, hasta el 90% del tiempo
en algunos casos. Un buen sistema de
predicción de decisiones escogerá las trayectorias correctas
más del 80% del tiempo.
Físicamente, la unidad de predicción de decisiones (BPU)
está situada al lado de la vía de acceso, y revisa con
anticipación el código de la instrucción para determinar
las conexiones de las decisiones. El orden es algo así: La BPU
inspecciona las instrucciones en la etapa de prebúsqueda, y si
la lógica de predicción de decisiones predice que se va
a realizar el salto, se le indica inmediatamente a la unidad de prebúsqueda
(PU) que comience a buscar instrucciones de la dirección de destino
de la dirección que se predijo. De forma alterna, si se determinó
que no se iba a tomar la decisión, no se perturba la secuencia
original de
prebúsqueda. Si la trayectoria pronosticada resulta ser errónea,
se vacía la vía de acceso y los buffers alternos de prebúsqueda,
y se recomienza la prebúsqueda desde la trayectoria correcta.
Se paga una penalidad de tres o cuatro ciclos de reloj por predecir
una trayectoria de forma errónea.
El Pentium usa un buffer de decisión de destino (BTB) como su
mecanismo. El BTB incluye tres elementos por cada entrada: la dirección
de la instrucción de salto, la dirección de destino de
la instrucción y los bits de historia. Se usa una tabla de hasta
256 entradas para predecir los resultados de las decisiones. El flujo
está basado, y se administra directamente desde la vía
U. Se usa la dirección de la vía U para la dirección
de la instrucción de decisión del BTB, aún si la
decisión está realmente en la vía V.
Hay dos bits de historia que informan si se tomó la decisión
anterior o no. El resultado es un procesador que corre con suavidad
y que a menudo sabe lo que hará antes de completar la tarea.
Ejecución de punto flotante
en el Pentium
Se ha reconstruido por completo la unidad de punto flotante
(FPU), a partir de la de los 386 y 486 y ahora tiene
algunas de las características de los RISC.
Hay ocho etapas de vía y las cinco primeras se comparten con
la unidad de enteros. La unidad cumple con la norma IEEE-754,
usa algoritmos más rápidos y aprovecha la arquitectura
con vías para lograr mejoras de rendimiento de entre 4 y 10 veces,
dependiendo de la optimización del compilador.
Ahorro de energía
El Pentium usa un modo de administración de sistema (SMM)
similar al que usa el 486 SL, que permite que los ingenieros diseñen
un sistema con bajo consumo. La interrupción de administración
del sistema activa el SMM por debajo del nivel del sistema operativo
o de la aplicación. Se guarda toda la información sobre
el estado de los registros para después restaurarla, y se ejecuta
el código de manejador de SMM desde un espacio de direcciones
totalmente separado, llamado RAM de administración del sistema
(SMRAM). Se sale del SMM ejecutando una instrucción especial
(RSM). Esto lleva al CPU de nuevo al mismo punto en que estaba cuando
se llamó al SMM.
Algunos procesadores (100 MHz o más lentos) presentan problemas
en este modo
|