Pregunta

Bien parece demasiado simple una pregunta que debe hacerse, pero me preguntó después de pasar por unos ppts en ambos.

Ambos métodos aumentan el rendimiento de instrucciones. Y Superscaling casi siempre hace uso de la canalización también. Superscaling tiene más de una unidad de ejecución y también lo hace la canalización o estoy mal aquí?

¿Fue útil?

Solución

diseño superescalar incluye el procesador es capaz de emitir varias instrucciones en un solo reloj, con instalaciones redundantes para ejecutar una instrucción. Estamos hablando de un solo núcleo, que conste -. Procesamiento multinúcleo es diferente

Pipelining divide una instrucción en pasos, y dado que cada paso se ejecuta en una parte diferente del procesador, instrucciones múltiples puede ser en diferentes "fases" cada reloj.

Están casi siempre se utilizan juntos. Esta imagen de Wikipedia muestra ambos conceptos en su uso, ya que estos conceptos se explican mejor gráficamente:

superescalar / pipelining en uso

A continuación, dos instrucciones se ejecutan a la vez en una tubería de cinco etapas.


Para descomponerlo aún más, dada su reciente edición:

En el ejemplo anterior, una instrucción va a través de 5 etapas para ser "realizado". Estos son SI (recuperación de instrucciones), ID (decodificación de instrucciones), EX (ejecución), el MEM (memoria de actualización), WB (reescritura de la memoria caché).

En un diseño de procesador muy simple, todos los relojes una etapa diferente sería completado por lo que tendría que:

  1. IF
  2. ID
  3. EX
  4. MEM
  5. WB

¿Qué haría una instrucción en cinco relojes. Si a continuación, añadimos una unidad de ejecución redundante y presentamos el diseño superescalar, tendríamos que esto, por dos instrucciones A y B:

  1. IF (A) IF (B)
  2. ID (A) ID (B)
  3. EX (A) EX (B)
  4. MEM (A) MEM (B)
  5. WB (A) WB (B)

dos instrucciones en cinco relojes -. Una ganancia máxima teórica de 100%

Pipelining permite que las piezas que se ejecutan simultáneamente, por lo que terminarían con algo como (para diez instrucciones A a la J):

  1. IF (A) IF (B)
  2. ID (A) ID (B) IF (C) IF (D)
  3. EX (A) EX (B) ID (C) ID (D) IF (E) IF (F)
  4. MEM (A) MEM (B) EX (C) EX (D) ID (E) ID (F) IF (G) IF (H)
  5. WB (A) WB (B) MEM (C) MEM (D) EX (E) EX (F) ID (G) ID (H) IF (I) IF (J)
  6. WB (C) WB (D) MEM (E) MEM (F) EX (G) EX (H) ID (I) ID (J)
  7. WB (E) WB (F) MEM (G) MEM (H) EX (I) EX (J)
  8. WB (G) WB (H) MEM (I) MEM (J)
  9. WB (I) WB (J)

En nueve relojes, hemos ejecutado diez instrucciones - se puede ver en la canalización realmente mueve a lo largo de las cosas. Y eso es una explicación del ejemplo gráfico, no cómo se llevan a la práctica en el campo (que es magia negro ).

Los artículos de Wikipedia para href="http://en.wikipedia.org/wiki/Superscalar" superescalar y tubería de instrucción son bastante buenos.

Otros consejos

Mucho tiempo hace, CPUs ejecutan sólo una instrucción de máquina a la vez . Sólo cuando se haya terminado completamente la CPU traiga la siguiente instrucción de la memoria (o, más tarde, el caché de instrucciones).

Finalmente, alguien se dio cuenta de que esto significaba que la mayor parte de una CPU no hicieron nada la mayor parte del tiempo, ya que había varias subunidades de ejecución (como el decodificador de instrucciones, la unidad aritmética de enteros, y la unidad aritmética FP, etc.) y la ejecución una instrucción mantiene sólo uno de ellos ocupado a la vez.

Por lo tanto, " sencilla " canalización nació: una vez que una instrucción se llevó a cabo la decodificación y continuó hacia la siguiente subunidad de ejecución, ¿por qué no lo ha hecho traer y decodificar la siguiente instrucción ? Si tuviera 10 tales " Arena ", luego por teniendo cada fase del proceso de una instrucción diferente usted puede aumentar teóricamente el rendimiento de instrucción diez veces sin aumentar el reloj de la CPU en absoluto! Por supuesto, esto sólo funciona a la perfección cuando no hay saltos condicionales en el código (esto llevó a una gran cantidad de esfuerzo extra para manejar los saltos condicionales especialmente).

Más tarde, con la ley de Moore sigue siendo correcta durante más tiempo de lo esperado, los fabricantes de CPU se encontraron cada vez con más transistores para hacer uso de y pensé "¿por qué tener sólo uno de cada subunidad de ejecución?". Por lo tanto, superescalar CPUs con múltiples subunidades de ejecución capaz de hacer el mismo cosa en paralelo nacieron y diseños de CPU se hizo mucho, mucho más compleja para distribuir instrucciones a través de estas unidades totalmente paralelos al tiempo que garantiza los resultados fueron los mismos que si las instrucciones han sido ejecutadas secuencialmente.

una analogía: Ropa que se lava

Imagínese una tienda de limpieza en seco con las siguientes instalaciones:. Un estante para colgar la ropa sucias o limpias, una lavadora y una secadora (cada uno de los cuales puede lavar una prenda a la vez), una mesa plegable, y una tabla de planchar

El asistente que hace todo el lavado real y el secado es más bien pocas luces por lo que el dueño de la tienda, que toma los pedidos de limpieza en seco, tiene un especial cuidado para escribir cada instrucción con mucho cuidado y de forma explícita.

En un día típico de estas instrucciones pueden ser algo en la línea de:

  1. tomar la camisa del estante
  2. lavar la camisa
  3. secar la camisa
  4. hierro de la camisa
  5. plegar la camisa
  6. poner la camisa de nuevo en el estante
  7. tomar los pantalones del estante
  8. lavar los pantalones
  9. secar los pantalones
  10. doblar los pantalones
  11. poner los pantalones de nuevo el estante
  12. tomar el abrigo del estante
  13. lavar la capa
  14. secar la capa
  15. hierro de la capa
  16. poner el abrigo en el perchero

La operadora sigue estas instrucciones al lugar de salida, teniendo mucho cuidado de no hacer nunca nada fuera de orden. Como se puede imaginar, se necesita mucho tiempo para conseguir la ropa del día de hecho, ya que toma mucho tiempo para lavar completamente, seco y doblar cada pieza de ropa, y todo debe hacerse uno a la vez.

Sin embargo, un día el encargado cierra y una nueva, más inteligente, asistente es contratado que se da cuenta de que la mayoría del equipo está sentando en reposo en un momento dado durante el día. Mientras que los pantalones se secaban ni la tabla de planchar, ni la lavadora estaban en uso. Así que decidió hacer un mejor uso de su tiempo. Así, en lugar de las dos series de pasos, que iba a hacer esto:

  1. tomar la camisa del estante
  2. lavar la camisa, tomar los pantalones del estante
  3. secar la camisa, lavar los pantalones
  4. hierro de la camisa, secar los pantalones
  5. plegar la camisa, (tomar el abrigo del rack)
  6. poner la camisa de nuevo en el estante, doblar los pantalones , (lavar la capa)
  7. poner los pantalones de nuevo el estante , (secar la capa)
  8. (planchar la capa)
  9. (poner el abrigo en el perchero)

Esto se pipelining. secuenciación actividades no relacionadas tales que utilizan diferentes componentes al mismo tiempo. Al mantener la mayor cantidad de los diferentes componentes activos a la vez a maximizar la eficiencia y acelerar el tiempo de ejecución, en este caso, la reducción de 16 "ciclos" a 9, un aumento de velocidad de más de 40%.

Ahora, la pequeña tienda de limpieza en seco comenzó a ganar más dinero, ya que pueden trabajar de manera mucho más rápida, por lo que el propietario compró una arandela adicional, secadora, plancha, tabla de estación de plegado, e incluso contrató a otra operadora. Ahora las cosas son aún más rápido, en lugar de lo anterior, se tiene:

  1. tomar la camisa del bastidor, tomar los pantalones del estante
  2. lavar la camisa, lavar los pantalones , (tomar el abrigo del bastidor)
  3. secar la camisa, secar los pantalones , (lavar la capa)
  4. hierro la camisa, doblar los pantalones , (secar la capa)
  5. doblar la camisa, poner los pantalones de nuevo el estante , (planchar la capa)
  6. poner la camisa de nuevo en el estante, (poner el abrigo en el perchero)

Este es el diseño superescalar. los subcomponentes múltiples capaces de realizar la misma tarea al mismo tiempo, pero con el procesador de decidir cómo hacerlo. En este caso resultó en un aumento de velocidad de casi el 50% (en 18 "ciclos" la nueva arquitectura podría funcionar a través de 3 iteraciones de este "programa" mientras que la arquitectura anterior sólo podía correr a través de 2).

procesadores más antiguos, como el 386 o 486, son procesadores escalares simples, ejecutan una instrucción a la vez en el orden exacto en el que fue recibido. Los procesadores de consumo modernos SINCe PowerPC / Pentium son pipeline y superescalar. Una CPU Core 2 es capaz de ejecutar el mismo código que fue compilado por un 486 sin dejar de tomar ventaja de la instrucción paralelismo a nivel, ya que contiene su propia lógica interna que analiza el código máquina y determina la forma de reordenar y ejecutarlo (lo que se puede ejecutar en paralelo , lo que no puede, etc.) Esta es la esencia del diseño superescalar y por qué es tan práctico.

En contraste un procesador paralelo vector realiza operaciones en varias piezas de datos a la vez (un vector). Por lo tanto, en lugar de sólo la adición de x e y un procesador de vector añadiría, digamos, x0, x1, x2 a y0, y1, y2 (resultando en z0, z1, z2). El problema con este diseño es que está estrechamente unida al grado específico de paralelismo del procesador. Si ejecuta código escalar en un procesador de vectores (que suponiendo que podría) se podría ver ninguna ventaja de la paralelización del vector, ya que tiene que ser utilizado de forma explícita, de manera similar si se quería aprovechar de un procesador vectorial nuevo con más unidades de procesamiento en paralelo (por ejemplo, capaz de añadir vectores de 12 números en lugar de sólo 3) que tendría que volver a compilar el código. diseños de procesadores de vectores fueron populares en la generación más antigua de super computadoras porque eran fáciles de diseñar y hay grandes clases de problemas en la ciencia y la ingeniería con una gran cantidad de paralelismo natural.

Los procesadores superescalares también pueden tener la capacidad para llevar a cabo la ejecución especulativa. En lugar de dejar unidades de procesamiento inactivo y en espera de una ruta de código para terminar la ejecución antes de ramificar un procesador puede hacer una mejor estimación y empezar a ejecutar el código más allá de la rama antes de código anterior se ha terminado de procesar. Cuando la ejecución del código antes capturas hasta el punto de ramificación del procesador puede entonces comparar la rama real con la conjetura rama y, o bien continuar por si la suposición era correcta (ya muy por delante de donde habría sido solamente esperando a) o puede invalidar los resultados de la ejecución especulativa y ejecutar el código de la rama correcta.

tuberias de lo que es una empresa de automóviles hace en la fabricación de sus automóviles. Rompen el proceso de elaboración de un coche en etapas y llevar a cabo las diferentes etapas en diferentes puntos a lo largo de una línea de montaje hecho por diferentes personas. El resultado neto es que el coche se fabrica exactamente a la velocidad de la etapa más lenta solo.

En el proceso de canalización CPU es exactamente el mismo. Una "instrucción" se divide en varias etapas de ejecución, por lo general algo así como buscar a 1. instrucción, 2. buscar a los operandos (registros o memoria los valores que se leen), 2. realizar el cálculo, 3. Los resultados de escritura (en la memoria o registros) . El más lento de esto podría ser la parte de cálculo, en cuyo caso la velocidad total el rendimiento de las instrucciones a través de esta tubería es sólo la velocidad de la parte de cálculo (como si las otras partes eran "libre".)

Super-escalar en los microprocesadores se refiere a la capacidad de ejecutar varias instrucciones de un solo flujo de ejecución a la vez en paralelo. Así que si una empresa de alquiler de dos líneas de montaje corrió entonces, evidentemente, que podían producir el doble de autos. Pero si el proceso de poner un número de serie en el coche estaba en la última etapa y tuvo que ser realizado por una sola persona, entonces tendrían que alternar entre las dos tuberías y garantizar que podrían obtener cada uno hace en la mitad del tiempo de la etapa más lenta con el fin de evitar convertirse en la etapa más lenta a sí mismos.

Super-escalar en los microprocesadores es similar, pero por lo general tiene muchas más restricciones. Por lo que la recuperación de instrucciones etapa por lo general producirá más de una instrucción durante su etapa - esto es lo que hace super-escalar en los microprocesadores posibles. En ese caso habría dos etapas fetch, dos etapas de ejecución, y dos etapas escribir de nuevo. Esto, obviamente, se generaliza a algo más que dos tuberías.

Esto es todo lo fino y elegante, pero desde la perspectiva de la ejecución de sonido ambas técnicas podría llevar a problemas si se hace a ciegas. Para la correcta ejecución de un programa, se supone que las instrucciones se ejecutan por completo uno tras otro en orden. Si dos instrucciones secuenciales tienen cálculos inter-dependientes o usan los mismos registros entonces no puede haber un problema, la instrucción más tarde tiene que esperar a que la parte posterior de escritura de la instrucción anterior para completar antes de que pueda llevar a cabo la etapa de recuperación de operando. Por lo tanto usted necesita para detener la segunda instrucción por dos etapas antes de ser ejecutado, lo que contradice el objetivo de lo que fue adquirida por estas técnicas en el primer lugar.

Hay muchas técnicas de uso para reducir el problema de la necesidad de detener que son un poco complicado de describir, pero voy a enumerarlos: 1. Registro de reenvío, (también almacenar para cargar reenvío) de cambio de nombre 2. registro, 3. puntuación- embarque, 4. la ejecución fuera de orden. 5. La ejecución especulativa con Rollback (y jubilación) Todas las CPU modernas utilizar casi todas estas técnicas para implementar superescalar y segmentación. Sin embargo, estas técnicas tienden a tener rendimientos decrecientes con respecto al número de tuberías en un procesador antes de puestos de venta se convierten en inevitable. En la práctica ningún fabricante CPU hace más de 4 tuberías en un solo núcleo.

Multi-core no tiene nada que ver con ninguna de estas técnicas. Esto es básicamente hincado dos microprocesadores conjuntamente para implementar multiprocesamiento simétrico en un solo chip y compartiendo sólo aquellos componentes que tienen sentido para compartir (típicamente caché L3, y I / O). Sin embargo, una técnica que Intel llama "hyperthreading" es un método de tratar de implementar prácticamente la semántica de múltiples núcleos dentro del marco super-escalar de un solo núcleo. Así que una sola micro-arquitectura contiene los registros de dos (o más) núcleos virtuales y extrae instrucciones de dos (o más) corrientes de ejecución diferentes, pero la ejecución de un sistema de super-escalar común. La idea es que debido a que los registros no pueden interferir entre sí, habrátienden a ser más paralelismo que conduce a un menor número de puestos. Así que en lugar de simplemente la ejecución de dos corrientes de ejecución núcleo virtuales a la mitad de la velocidad, es mejor debido a la reducción global de puestos. Esto parece sugerir que Intel podría aumentar el número de tuberías. Sin embargo, esta técnica se ha encontrado para ser algo carente de implementaciones prácticas. Ya que es parte integral de las técnicas de super-escalares, sin embargo, he mencionado que de todos modos.

Pipelining es la ejecución simultánea de diferentes etapas de múltiples instrucciones en el mismo ciclo. Se basa en el procesamiento de instrucciones de división en etapas y que tiene unidades especializadas para cada etapa y registros para almacenar resultados intermedios.

Superscaling está enviando múltiples instrucciones (o microinstrucciones) a múltiples unidades de ejecución existentes en CPU. Se basa por lo tanto en las unidades redundantes en CPU.

Por supuesto, esto enfoques pueden complementarse entre sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top