¿Diferencia entre superescalar y multinúcleo?

11

Parece que no puedo entender esto, ¿cuál es la diferencia entre el procesador superescalar y un procesador multinúcleo?

Sigo mezclándolos, por lo que algunos puntos simples sobre lo que hacen serían geniales.

Mars Rover
fuente
También me confunde ... Según Wikipedia, los procesadores superescalares podrían ser de un solo núcleo o tener un diseño de múltiples núcleos. en.wikipedia.org/wiki/Superscalar_processor 2nd phara
Avi Mehenwal

Respuestas:

15

Los procesadores superescalares significan que envía múltiples instrucciones durante un solo ciclo de reloj. La razón por la que esto se diferencia de multi-core es que solo obtienes un contador de instrucciones. Por lo tanto, realiza un seguimiento de varias instrucciones en vuelo, pero todas las instrucciones provienen de un solo programa. Esto sigue siendo solo un proceso. Ahora dije "obtienes un contador de instrucciones", y técnicamente eso es cierto en que no hay ningún punto en el que tu código experimente una disparidad, excepto el uso de algunos esquemas de predicción de rama (Ejecución especulativa: simultáneamente ejecutas ambas ramas y tiras el "error" "resultado de la predicción).

Cuando ingresa a múltiples núcleos, tiene múltiples flujos de instrucciones ejecutándose simultáneamente. ¡La parte importante es que cada núcleo (ejecutándose con su propio contador de instrucciones) también puede ser superescalar para ejecutar cada proceso más rápidamente!

Es posible tener súper escalar sin canalización o ejecución fuera de orden al tener lo que se llama palabra de instrucción muy larga o "VLIW". Esto también se llama superescalar "estático" (es decir, está en el código mismo). Aquí es donde básicamente tiene suficientes componentes para ejecutar múltiples instrucciones al mismo tiempo, y obtiene múltiples instrucciones a la vez y luego las ejecuta. En su forma más simple, imagine que dijo "este procesador siempre buscará y ejecutará dos instrucciones al mismo tiempo". Entonces, mientras el codificador pueda encontrar el trabajo que se debe hacer simultáneamente en el mismo proceso, ¡duplicará su rendimiento! Si no puede encontrar dos instrucciones para armar, simplemente empareje una instrucción y un NOP. Esta idea no es muy buena en su mayoría porque si crea una mejor versión del procesador que puede ejecutar 3, 4 o más instrucciones al mismo tiempo, ¡se rompe todo el código anterior! Pero resolvieron esto de una manera bastante ingeniosa, debe consultar explícitamente la computación de instrucciones paralelas o cosas "EPIC" si desea saber más.

El superescalar dinámico con canalización puede aprovechar tanto las instrucciones independientes de los datos como el paralelismo a nivel de instrucción, que es lo que la convierte en una combinación tan poderosa. Esencialmente le permite, con suficiente hardware, ejecutar tantas instrucciones independientes simultáneamente como sea posible.

El superescalar dinámico con canalización y ejecución fuera de orden era esencialmente el límite del paralelismo a nivel de instrucción: intentaría ejecutar múltiples instrucciones en la misma etapa simultáneamente, tratando de encontrar operaciones que operaran sin dependencias de datos. Podrías terminar fuera de servicio, comenzarías fuera de servicio, hay todo tipo de cosas que debes hacer para mantener la cabeza recta mientras haces cosas súper escalares. Multi-core dice "¡Hola, programador! ¡Dame varios problemas que pueda resolver al mismo tiempo!" y luego, dado que el programador es capaz de ver problemas que se pueden resolver de forma independiente más allá de unas pocas líneas separadas en el ensamblaje compilado, puede programar de manera más eficiente esas soluciones para múltiples núcleos.

Super-escalar ni siquiera es capaz de resolver problemas como "¿cómo ejecuto estos dos programas más rápidamente?" Solo podía ejecutar cada programa independiente más rápido.

Espero que ayude, lo siento si es un poco inconexo.

--Editar--

Modificado para tener en cuenta el punto de ajs410 de que había confundido varias ideas.

Kit Scuzz
fuente
Sí, eso lo hizo mucho más claro, ¡gracias! Por cierto, creo que la palabra que estás buscando es "Ejecución especulativa". De todos modos, gracias de nuevo.
Marroquí
1
Para que las cosas aclaradas por @KitScuzz sean un poco más complicadas nuevamente, también lea HyperThreading
ppeterka
Creo que esto difumina súper escalar, fuera de orden y canalización. Específicamente, el súper escalar dice "Tengo cuatro ALU, por lo que puedo tomar estas cuatro instrucciones para agregar (de un solo hilo) y emitirlas durante el mismo ciclo de reloj". La ejecución fuera de orden reorganiza el flujo de instrucciones en torno a las dependencias de datos para maximizar el paralelismo de nivel de instrucción. La canalización emitirá nuevas instrucciones mientras las antiguas estén en vuelo. La ejecución y la canalización fuera de orden tienen una fuerte sinergia con la ejecución superescalar, pero no son estrictamente necesarias para satisfacer la definición.
ajs410
¡Fijo! Perdón por el retraso.
Kit Scuzz
1

Si mira hacia atrás a los procesadores anteriores como el 80486 o Pentium, entonces una CPU era una sola unidad lógica de procesamiento. Ejecuta una sola secuencia de instrucciones a la vez. Una sola CPU también era un solo chip de silicio. Si desea más potencia de procesamiento, puede comprar una placa base de servidor costosa que tiene ranuras para dos CPU separadas. Entonces tenías una máquina con dos CPU y dos núcleos de procesamiento.

En algún momento, la Ley de Moore significaba que teníamos tantos transistores disponibles en el silicio que podía colocar todos los circuitos de dos CPU en un solo chip. Ahora tiene el potencial de nombrar confusión. Decir que tiene dos CPU podría significar que tiene dos paquetes de silicio de estilo antiguo o el paquete de silicio único más nuevo, pero con la configuración de procesamiento de dos procesadores. Para resolver esto, ahora queremos decir que la CPU es un solo paquete de silicio y un Core es una sola unidad de procesamiento lógico dentro de él.

Super-escalar se refiere a una técnica utilizada dentro de un núcleo para tratar de mejorar el rendimiento y permitirle procesar más instrucciones por ciclo en promedio. Un procesador escalar ejecuta como máximo una instrucción por ciclo, super-escalar significa que potencialmente puede ejecutar más de una instrucción por ciclo. Por ejemplo, si el procesador tiene una unidad funcional para aritmética de enteros y otra para coma flotante, ¿por qué no utilizar ambas al mismo tiempo para ejecutar dos instrucciones simultáneamente? ¿Qué pasa si tiene tres unidades enteras y dos unidades de coma flotante? Ahora tiene un potencial aún mayor para la ejecución paralela. Pero también necesita más transistores para la implementación y una lógica mucho más complicada para que funcione de manera confiable. En el mundo real, se tiende a utilizar un superescalar junto con diseños desordenados porque se complementan entre sí.

Phil Wright
fuente