Articulo de referencia

Microoperación

Ilustración de alto nivel que muestra la descomposición de las instrucciones de máquina en microoperaciones, realizadas durante los ciclos típicos de búsqueda, decodificación y ...

Ilustración de alto nivel que muestra la descomposición de las instrucciones de máquina en microoperaciones, realizadas durante los ciclos típicos de búsqueda, decodificación y ejecución [ 1 ] : 11

En las unidades centrales de procesamiento de computadoras , las microoperaciones (también conocidas como micro-ops o μops , históricamente también como microacciones [ 2 ] ) son instrucciones detalladas de bajo nivel que se utilizan en algunos diseños para implementar instrucciones de máquina complejas (a veces denominadas macro-instrucciones en este contexto). [ 3 ] : 8–9

Generalmente, las microoperaciones realizan operaciones básicas sobre los datos almacenados en uno o más registros , incluyendo la transferencia de datos entre registros o entre registros y buses externos de la unidad central de procesamiento (CPU), y la realización de operaciones aritméticas o lógicas sobre los registros. Las microoperaciones se suelen representar mediante el lenguaje de transferencia de registros . [ 4 ] En un ciclo típico de búsqueda, decodificación y ejecución , cada paso de una macroinstrucción se descompone durante su ejecución, de modo que la CPU determina y ejecuta una serie de microoperaciones. La ejecución de las microoperaciones se realiza bajo el control de la unidad de control de la CPU , que decide sobre su ejecución mientras realiza diversas optimizaciones como la reordenación, la fusión y el almacenamiento en caché. [ 1 ]

Optimizaciones

Diversas formas de microoperaciones (μops) han sido durante mucho tiempo la base de las rutinas de microcódigo tradicionales utilizadas para simplificar la implementación de un diseño de CPU particular o, quizás, simplemente la secuenciación de ciertas operaciones de varios pasos o modos de direccionamiento. Más recientemente, las μops también se han empleado de una manera diferente para permitir que los procesadores CISC modernos manejen más fácilmente la ejecución asíncrona paralela y especulativa: al igual que con el microcódigo tradicional, se realiza una o más búsquedas en tablas (o equivalente) para localizar la secuencia de μop apropiada según la codificación y la semántica de la instrucción de máquina (el paso de decodificación o traducción); sin embargo, en lugar de tener secuencias de μops rígidas que controlan la CPU directamente desde una ROM de microcódigo , las μops se almacenan dinámicamente en búfer para su reprogramación antes de su ejecución. [ 5 ] : 6–7, 9–11

Este almacenamiento en búfer implica que las etapas de búsqueda y decodificación pueden separarse más de las unidades de ejecución de lo que es factible en un diseño microcodificado (o cableado) más tradicional. Dado que esto permite cierto grado de libertad en cuanto al orden de ejecución, posibilita la extracción de paralelismo a nivel de instrucción de un programa monohilo normal (siempre que se verifiquen las dependencias, etc.). Esto abre la puerta a un mayor análisis y, por lo tanto, también a la reordenación de secuencias de código para optimizar dinámicamente la asignación y la planificación de microoperaciones en los recursos de la máquina (como las ALU , las unidades de carga/almacenamiento, etc.). Como esto ocurre a nivel de microoperación, las suboperaciones de diferentes instrucciones de máquina (macro) a menudo pueden mezclarse en una secuencia de microoperaciones particular, formando instrucciones de máquina parcialmente reordenadas como consecuencia directa del despacho fuera de orden de microinstrucciones de varias instrucciones macro. Sin embargo, esto no es lo mismo que la fusión de micro-operaciones , cuyo objetivo es que una microinstrucción más compleja pueda reemplazar a algunas micro-instrucción más simples en ciertos casos, generalmente para minimizar los cambios de estado y el uso del espacio de la cola y el búfer de reordenamiento , reduciendo así el consumo de energía. La fusión de micro-operaciones se utiliza en algunos diseños de CPU modernos. [ 3 ] : 89–91, 105–106 [ 5 ] : 6–7, 9–15

La optimización de la ejecución ha ido aún más lejos; los procesadores no solo traducen muchas instrucciones de máquina en una serie de microoperaciones (μops), sino que también hacen lo contrario cuando es apropiado: combinan ciertas secuencias de instrucciones de máquina (como una comparación seguida de un salto condicional) en una microoperación más compleja que se ajusta mejor al modelo de ejecución y, por lo tanto, puede ejecutarse más rápido o con menos recursos de la máquina. Esto también se conoce como fusión de macrooperaciones . [ 3 ] : 106-107 [ 5 ] : 12-13

Otra forma de intentar mejorar el rendimiento es almacenar en caché las microoperaciones decodificadas en una caché de microoperaciones , de modo que si se ejecuta la misma macroinstrucción de nuevo, el procesador pueda acceder directamente a las microoperaciones decodificadas desde la caché, en lugar de decodificarlas de nuevo. La caché de trazas de ejecución que se encuentra en la microarquitectura Intel NetBurst ( Pentium 4 ) es un ejemplo común de esta técnica. [ 6 ] El tamaño de esta caché se puede expresar en términos de cuántos miles (o múltiplos estrictos de 1024) de microoperaciones puede almacenar: Kμops . [ 7 ]

Referencias

  1. 1 2 "Organización y arquitectura de computadoras, capítulo 15. Operación de la unidad de control" (PDF) . umcs.maine.edu . 16 de marzo de 2010. Consultado el 29 de diciembre de 2014 .
  2. FM1600B Microcircuit Computer Ferranti Digital Systems (PDF) . Bracknell, Berkshire, Reino Unido: Ferranti Limited , Departamento de Sistemas Digitales. Octubre de 1968 [septiembre de 1968]. Lista DSD 68/6. Archivado (PDF) del original el 19 de mayo de 2020. Consultado el 19 de mayo de 2020 .
  3. 1 2 3 Agner Fog (19 de febrero de 2014). "La microarquitectura de las CPU de Intel, AMD y VIA: una guía de optimización para programadores de ensamblador y creadores de compiladores" (PDF) . agner.org . Consultado el 21 de marzo de 2014 .
  4. "Lección 9 - Transferencia de Registros y Microoperaciones" (PDF) . Sistemas I: Organización y Arquitectura de Computadoras . pág. 2. 
  5. 1 2 3 Michael E. Thomadakis (17 de marzo de 2011). "La arquitectura del procesador Nehalem y las plataformas SMP Nehalem-EP" (PDF) . Universidad de Texas A&M. Archivado del original (PDF) el 11 de agosto de 2014. Recuperado el 21 de marzo de 2014 .
  6. "Intel Pentium 4 1.4GHz y 1.5GHz" . AnandTech. 2000-11-20. Archivado del original el 26-05-2010 . Consultado el 06-10-2013 .
  7. Baruch Solomon; Avi Mendelson; Doron Orenstein; Yoav Almog; Ronny Ronen (agosto de 2001). "Caché de microoperaciones: un frontend de bajo consumo para ISA de longitud de instrucción variable" (PDF) . ISLPED'01: Actas del Simposio Internacional de 2001 sobre Electrónica y Diseño de Bajo Consumo (IEEE Cat. No. 01TH8581) . Intel . págs. 4–9 . doi : 10.1109/LPE.2001.945363 . ISBN  1-58113-371-5. S2CID 10934861 . Consultado el 21-03-2014 .