diferencia entre las micro-operaciones en los procesadores RISC y CISC

4

He leído que los procesadores Intel modernos usan las instrucciones CISC en la parte superior, que se convierten en instrucciones más simples similares a RISC en forma de Micro-Operaciones en el back-end.

Entonces, si las microoperaciones de Intel son controles de nivel de hardware simples tipo RISC, ¿qué hacen las microoperaciones ARM?

Debido a que las instrucciones ARM ya son bastante similares a RISC, ¿cómo se vería su formulario de Micro-Operaciones?

    
pregunta Kraken

3 respuestas

4

Todos los microprocesadores y, de hecho, todos los circuitos digitales síncronos funcionan en lo que se llama un "Nivel de transferencia de registro". Básicamente, todo lo que hace cualquier microprocesador es cargar valores en registros de diferentes fuentes. Esas fuentes pueden ser memoria, otros registros o la ALU (Unidad lógico-artificial, una calculadora dentro del procesador). Algunos de los registros son simples registros dentro del asesor, algunos registros pueden ser registros de funciones especiales que se encuentran alrededor de la CPU, en 'periféricos' como los puertos de E / S, la unidad de administración de memoria, la unidad de interrupción, esto y aquello.

En este modelo, las 'Instrucciones' son secuencias básicas de transferencias de registros. Normalmente no tiene sentido darle al programador la capacidad de controlar cada transferencia de registro individualmente, porque no todas las posibles combinaciones de transferencia de registro son significativas, por lo que permitir que el programador las exprese todas sería un desperdicio en términos de consumo de memoria. Básicamente, cada procesador declara un conjunto de conjuntos de transferencias de registros que le permite al programador pedirle al procesador que haga, y estas se llaman "Instrucciones".

Por ejemplo, ADD A, B, C puede ser una operación en la que la suma de los registros A y B se coloca en el registro C. Internamente, serían tres transferencias de registros: Cargue la entrada izquierda del sumador desde A, cargue la entrada derecha del sumador desde B, luego carga C desde la salida del sumador. Además, el procesador realiza las transferencias necesarias para cargar el registro de direcciones de memoria desde el contador de programas, cargar el registro de instrucciones desde el bus de datos de memoria y finalmente cargar el contador de programas desde el incrementador de contador de programas.

El 8086 usó una tabla de búsqueda de ROM interna para ver qué transferencias de registro realizan cada instrucción. Los diseñadores de la CPU 8086 programaron libremente los contenidos de esa ROM, por lo que eligieron secuencias de instrucciones, que parecían útiles para el programador, en lugar de elegir secuencias que serían sencillas y rápidas de ejecutar por la máquina. Recuerde que en esos días, la mayoría del software estaba escrito en lenguaje ensamblador, por lo que tenía sentido hacerlo lo más fácil posible para el programador. Más tarde, Intel diseñó 80286, en el que cometieron, lo que ahora parece ser un error crítico. Les quedaba algo de memoria de microcódigo sin usar y pensaron que también podrían llenarla con algo, y dieron algunas instrucciones solo para llenar el microcódigo. Esto los mordió al final, ya que todas esas instrucciones adicionales debían ser compatibles con los procesadores 386, 486, Pentium y posteriores, que ya no usaban microcódigo.

ARM es un diseño de procesador mucho más nuevo que el 8086 y la gente de ARM tomó una ruta de diseño diferente. Para entonces, las computadoras eran comunes y había muchos compiladores disponibles. Así que en lugar de diseñar un conjunto de instrucciones que sea agradable para el programador, eligieron un conjunto de instrucciones que es rápido para que la máquina ejecute y eficiente para que el compilador genere el código. Y por un tiempo, el X86 y el ARM fueron diferentes en la forma en que ejecutaron las instrucciones.

El tiempo pasa y las CPU se vuelven cada vez más complejas. Y también los microprocesadores están diseñados utilizando computadoras y no lápiz y papel. Ya nadie usa microcódigo, todos los procesadores tienen una unidad de control de ejecución cableada (lógica pura). Todos tienen múltiples unidades de cálculo de enteros y múltiples buses de datos. Todos traducen sus instrucciones entrantes, las reprograman y las distribuyen entre las unidades de procesamiento. Incluso los antiguos conjuntos de instrucciones RISC se traducen en nuevos conjuntos de operaciones RISC. Así que la vieja pregunta de RISC versus CISC ya no existe realmente Nuevamente estamos de nuevo en el nivel de transferencia de registro, los programadores piden a la CPU que realice las operaciones y la CPU los traduce en transferencias de registro. Y ya sea que la traducción se realice mediante una ROM de microcódigo o una lógica digital cableada, realmente ya no es tan interesante.

    
respondido por el PkP
2

La idea de que "hay un RISC dentro del x86 moderno" es bastante engañosa. Tengo la impresión de que Intel lo dijo por primera vez como una estrategia de marketing cuando lanzaron el i486, que era el primer x86 canalizado, y podía ejecutar muchas instrucciones en 1 ciclo, como las CPU RISC contemporáneas.

El problema es que RISC y CISC se refieren a conjuntos de instrucciones (que son visibles para el programador de ensamblajes), no a la microarquitectura interna. Los x86 han sido diseñados como microcodificados (8086), segmentados (80486), OoO con microoperaciones (PentiumPro), VLIW (Transmisión) ...

Volver a la pregunta.

Las microoperaciones realmente no forman un conjunto de instrucciones, son bastante similares a las señales que atraviesan una tubería, seleccionando registros leídos y escritos, operaciones ALU ...

La mayoría de las instrucciones ARM se pueden ejecutar en un solo paso, mientras que muchas instrucciones x86 deben integrarse en una secuencia de 2 o más microoperaciones, pero hay poca diferencia.

En las CPU de OoO, partes de estas informaciones se almacenan en FIFO y búferes como colas de reserva, búferes de reorden ... Estas partes de instrucciones son ciertamente bastante similares en principio entre ARM y x86, pero no hay "RISC inside"

    
respondido por el TEMLIB
0

¡Las ARM no usan micro-ops!

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas