Mira la pral diferencia entre AMD e INTEL es la arquitectura de la pipeline.
En muxos foros especializados donde se discute de arquitecturas de procesadores hay una palabra que se repite constantemente y es esta:
PIPELINE: Pues bien, la definicion es sencilla y se podria comparar con una analogia de una pizzeria.
Hay una cadena de pizzeros y cada uno con un trabajo especializado:
1) Hacen la masa de la pizza
2) Dan la masa de pan , aspecto de pizza (COn el rodillo)
3) Echan ingredientes determinados (Jamon, Queso, Champiñones, Pepperoni, etc...
4) Encargados del Horno
5) "Moteros" encargados de las entregas de las pizzas.
Una vez completadas cada tarea, hecha por un grupo en concreto pasa a la otra y asi sucesivamente, cuando la pizza se entrega, Otra vez se reinicia el proceso y asi sucesivamente...
La pregunta q os hareis ( IO me la hacia tb) seria:
Porque no tienen a una sola persona haciendo todas las tareas?, serian 4 sueldos menos claramente, ?¿
Pues bien, esto es debido que para cada tarea de la "cadena" hacen falta unas habilidades concretas. No todos tienen carnet de moto, ni tienen habilidad para amasar y estirar la pizza, ni soportan bien las altas temperaturas del horno, etc...
Asi que es una manera mas eficiente la de tener a 5 tipos trabajadores haciendo bien su trabajo.
Si podemos tener nuestra cadena llena constantemente y mantener a nuestros empleados trabajando a la vez, podemos sacar muxas pizzas de nuestra factoria. Asi que esto nos daria una idea de lo q es una pipeline de 5 pasos. En concreto y en argot seria una Fully Pipelined of 5 stages. Es porque todos los pasos estan llenos a la vez y NO HAY DELAYS entre ellos.
Una vez entendido el concepto de pipeline, volvamos a nuestro mundo de los ordenadores, donde la cosa se complica ciertamente. Como explique en otro post mio de Intel vs AMD, los procesadores repiten 4 pasos basicos una y otra vez para poder ejecutar un codigo.
1) Fetching (Agarrado de 1 instruccion desde su direccionamiento concreto)
2) Almacenado de instruccion y decodificacion
3) Ejecucion de la instruccion [Paso d Ejecucion].
4) Repiten los pasos 1-3
EL paso de ejecucion en caso de que sea de un ADD seria:
1) Leer contenidos del registro A y B
2) Suma logica de A + B
3) Escritura de la Adicion (ADD) en el registro A.
Asi que hay 4 pasos claves: FETCHING, DECODING, EXECUTING y escritura de los resultados de la instruccion desde la ALU a sus registro de destino.
En procesadores modernos estos 4 pasos se repiten de manera ciclica para poder ejecutar un programa. SON LOS 4 PASOS BASICOS de la Pipeline RISC.
Volviendo a la pizzeria. Cada unos de estos pasos representan uno de nuestros pasos. Los primeros procesadores lo hacian de forma ineficiente, es decir como nuestra cadena de la pizzeria, solo hay una instruccion en la pipeline y esa instruccion va moviendose por todos los pasos de la pipeline y hace que todos los pasos anteriores esten esperando a que se termine para poder empezar a trabajar de nuevo (Estados IDLE de la pipeline). Este resultado nos lleva a que haya un retardo de 10ms en nuestra pipeline en cada paso y por tanto que el tiempo en penalizaciones se acumule. 10x4=40ms
Esto se arreglo cuando se introdujo el termino: ***Pipelined Execution
Este concepto hace que la pipeline del micro trabaje de forma constante y que la pipeline pueda trabajar con una instruccion y luego otra y asi sucesivamente sin tener que estar esperando a los siguentes pasos anteriores. Esto es que si cada paso dura 10ms, una pipeline FULL procesa 1 instruccion cada 10 ms y NO 40.
La division de Front-END y Back-END es por todos vosotros conocida, como todos sabeis ya, las instrucciones fetched de la DRAM o el CACHE tiene q ser decodificada para ser ejecutada. La tarea de Fetching y Decoding se realiza en el FRONT-end , posteriormente se ejecuta en el BACK-end, que alberga unidades funcionales de ejecucion (LSU. IEU, FPU).
Pues bien, todas las partes integrantes de la CPU, trabajan con un delay de 1 clock (INTEL Nwood 0,5clk). Asi que cuanto mas intern clock trabaje un micro, mas rapido trabaja esta pipeline y mas rapido puede moverse las instrucciones en nuestra pipeline.
Cada paso de la pipeline le cuesta 1 CLK. En nuestra pizzeria, podemos pensar que tenemos a nuestros empleados trabajando y que en cada paso de la cadena debe hacerse en 10 minutos JUSTOS.
Debido a esta Naturaleza de la pipeline, una de las mayores dificultades de los Diseñadores de CPU es ese "equilibrio" dinamico entre los pasos de la pipeline y que 1 paso no tenga que hacer mas trabajo q otro. Debe haber un proceso distribuido de la carga del proceso de esa informacion y que no hay por lo tanto retardos o burbujas en nuestra pipeline.
La esencia te todo esto es claramente, q la PIPELINE permite a la CPU procesar multiples instrucciones al mismo tiempo. El modelo de antes q os he explicado seria un modelo obsoleto de una CPU antigua. Ahora podeis entender que se pueden introducir varias instrucciones en la pipeline. Esto es el SUPERSCALAR EXECUTING.
Como todos sabreis, no todas las pipelines son de 4 pasos, ya que estos 4 representan la minima labor de computacion o proceso de instrucciones. La mayoria de los micros actuales, tienen esas 4 pipelines sub-divididas en pasos mas pequeños. Debida a la relacion de q cuantos mas pasos y mas cortos sean esos pasos de pipeline, podemos conseguir una intern clock (clock speed) mas rapida.
NO hara muxo que las DIEŽs no podian mas que contener unos pocos integrados la verdad, muxas de las partes intimamente ligadas al Back-END estaban distribuidas en circuitos separados. 1 chip contenia el ALU, otro los GPRŽs, otro la Unidad de Control, etc...
Estas maquinas eran claramente lentas y MUY caras ya que tenian muxos xips y cada uno con un coste de implementacion. Con la llegada del INTEL 4004 en 1973 todo cambio. Este 4004 fue el primer microprocesador en 1 solo xip. Este 4004 tenia 16 registros de 4bit, 1 ALU, 1 unidad de decodificacion de instrucciones y 1 Unidad de Control. Durante las decadas posteriores al 4004, las densidades de los transistores han aumentado ENORMEMENTE. Una de estas razones es la q les impulso a integrar varias ALUŽs trabajando en paralelo, asi que podian trabajar con mas de 1 Escalar (o Entero para nuestros propositos) y se les denomino Maquinas Superescalares. INtel en 1993 introdujo el Pentium con sus 2 ALUŽs impulsando la arquitectura x86 al standard Superescalar. Por lo tanto, AMD e INTEL sin superescalares los dos [ No recuerdo quien me preguntaba esta duda].
El procesador SUperescalar añade complejidad a nuestro flujo de datos en el micro. Ahora la unidad de control de la CPU tiene q reordenar la instruccion lineal para que algunas de sus instrucciones se puedan ejecutar en paralelo (BAck-END ALUx2).
Recordad que la DRAM solo ve 1 solo flujo de codigo y 1 solo flujo de datos y q posteriormente estos 2 flujos se unen en la CPU y son inyectados hacia las 2xALU en paralelo (INTEL).
En un diseño SUPERESCALAR necesitaremos gran cantidad de Hardwiring para poder conectar 1 ALU con su gemela.
Volviendo al modelo de BACK END del micro, que tenia integrado el ALU, este tiene un solo paso de pipeline ya que las operaciones aritmetico-logicas son las mas sencillas y necesitan 1 solo paso de pipeline. Sin embargo la FPU, tiene 4 pasos de pipeline ya que las operaciones de coma flotante son mas complejas y tardan mas CLK en completarse, para tal efecto los diseñadores dividen la FPU en multiples pasos de 1 solo ciclo.
Si pensamos en el K7 hemos de saber que implementan Out Of Order execution, Vector Processing y cada uno tiene un diseño Superescalar. El K7 cuenta con unos 22 millones de transistores. K7 es sin duda una bestia de CPU con una pipeline realmente optimizada y unas unidades funcionales realmente alucinantes. El Back end del K7 cuenta con unas Unidades de ejecucion de enteros increibles, una FPUx3 muy poderosa y una Unidad de procesamiento vectorial Altivec + 3DNow!
El esquema de decodificacion del K7 (Front-End recordad) tiene q verselas con el x86 ISA. Sin duda el K7 paga un gran precio en terminos de recursos de transistores y de unos Ciclos de Reloj perdidos para poder asegurarse de una compatibilidad con ISA-CLOCK, cosa q me parece excelente ya que asi se evitan problemas de "traduccion" q conllevaria a probs d compatibilidad que a su vez llevarian al poderoso K7 a la derrota comercial.
AMD añade un cache precodigo para poder trabajar con los tamaños variables de las instrucciones x86 y las decodifica en MacroOps, estas estan compuestas a su vez de 1 o 2 instrucciones mas pequeñas , como pueden ser un LOAD, un STORE, estas se llaman OPS. De esta manera el K7 emula el x86 ISA usando tecnicas RISC claramente
Para ello el K7 usa 2 pipelines separadas de decodificacion. TIene un Hardware decoder que hace lo suyo con las instrucciones mas pequeñas x86 y un decodificador de microcodes para hacer lo suyo con instrucciones x86 mas largas y complejas. Las instrucciones complejas son pocas y el Hardware decoder es el q lleva la batuta en el tema de compatibilidad del ISA x86. Asi que vemos las penalizaciones del K7 a la hora de la compatibilidad con ISAx86. Esto afecta por lo tanto a la profundidad de la pipeline, exactamente 3 pasos mas son introducidos...
La gran cuestion es que, como este lastre del x86 afecta al rendimiento del K7-----> Pues para eso tenemos q explicar otra unidad funcional:
*Unidad de Branch Prediction:
[Esto esta REALMENTE MUY MUY interesante ]
Como sabeis, tener una pipeline profunda es algo bueno (Puedes obtener mayores frecuencias de reloj) pero conlleva ciertos riesgos. Actualmente los FRONT-END de los procesadores pueden encontrarse un construccion condicional llamada "IF-THEN-ELSE". Esta puede cambiar el flujo de datos dependiendo del resultado de un calculo. Las CPUŽs mas antiguas tenian q estar esperando hasta que esta condicion era evaluada para ver sencillamente por donde "inclinarse"
y las pipelines estaban esperando y como no entrando en IDLE.
Ahi es donde entra la unidad de prediccion de Branch [Lo siento pero no tengo una traduccion para este termino]. El Branch prediction es sin duda el encargado de predecir que THEN sera cogido e inmediatamente ejecutar las instrucciones branch mientras el IF es evaluado. Es decir se adelanta al problema del THEN mientras evalua el IF.
El Branch prediction ayuda por lo tanto a mantener la pipeline llena y que los ciclos de reloj NO se malgasten, ni que en la pipeline incurra una burbuja. La pipeline del K7 es de 10-15 pasos, imaginaos una burbuja de 15 ciclos, BUFFF, desperdicio de tarea, asi que entendereis q AMD gaste MUUXOS integrados en su unidad de Prediccion Branch, ya q es clave en su brutal rendimiento
El K7 puede "escupir" 3 MacroOps por ciclo hacia cualquiera de sus 9 unidades de ejecucion (Front-End)
El Back-END del K7 tiene caracteristicas Superescalares y de Ejecucion Fuera de Rango (OOO)
Estas Out-Of-Order requieren gran cantidad de transistores y una adicion MUY MUY seria a la arquitectura de la CPU. Os resumo lo q es el OOO.
Los micros modernos tienen una serie de recursos limitados, estos son 2:
*Registros limitados (Almacenamiento de Datos)
*Unidades de Ejecucion (Mastica y escupe datos)
Para mantener al micro trabajando a maximo rendimiento, tenemos q tener la pipeline FULL-Working es decir asegurar un flujo de datos constantes hacia las unidades de ejecucion. Esto conlleva una reorganizacion profunda de este flujo de instrucciones de diferente manera a la forma natural de su llegada. El micro ha de ser inteligente y tiene que tener MUXOS buffers para poder ejecutar las instrucciones de la manera mas eficiente.
Asi que la ilusion de un flujo IN-ORDER conlleva un retirado de instrucciones IN-ORDER tb. Es decir del mismo modo que entran desde la DRAM o cache y se vuelven a reescribir ahi. Esto quiere decir q una CPU con core Out-Of-Order tiene q recordar todas las instrucciones y sus fases correspondientes de ejecucion para que pueda utilizarlas y retirarlas (rewrite) de la manera mas eficiente.
Cuando hablamos de Unidades de Ejecucion de Enteros, el K7 es la gran bestia!!!
Con sus 3 IEU full pipelined es como decir q tiene mas caballos para procesar enteros q iNTEL. Asi que el K7 tiene tb gran cantidad de transistores dedicados a sus FPUŽs. Cada unidad son FADD,FMUL y FStore. Cada una especializada y puede realizar calculos de coma flotante muy criticos y por supuesto en paralelo
El K7 usa una circuiteria en concreto para realizar sus calculos vectoriales 3DNow! y MMX, especificamente si no recuerdo mal 7 registros de 64bit...
...Y ya no se me ocurre contaros nada mas del K7. Son muxas las cosas q me dejo, pero espero que el proximo dia leais "full pipelined" entendais lo q significa y os acordeis de mi texto
Espero haber aclarado tus dudas, mirate el otro post de arquitectura del pIV
H