En las unidades centrales de procesamiento de computadoras , las microoperaciones (también conocidas como microoperaciones 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 complejas de la máquina (a veces denominadas macro- instrucciones en este contexto). [3] : 8–9
Por lo general, las microoperaciones realizan operaciones básicas sobre datos almacenados en uno o más registros , incluida 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 en registros. En un ciclo típico de búsqueda-decodificación-ejecución , cada paso de una macroinstrucción se descompone durante su ejecución, por lo que la CPU determina y recorre 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 su ejecución mientras realiza diversas optimizaciones como reordenamiento, fusión y caché. [1]
Optimizaciones
Varias formas de μ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 en particular o quizás simplemente la secuenciación de ciertas operaciones de varios pasos o modos de direccionamiento. Más recientemente, los μ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 realizan una o más búsquedas de tablas (o equivalentes) para ubicar el μop- apropiado. secuencia basada en la codificación y semántica de la instrucción de la máquina (el paso de decodificación o traducción), sin embargo, en lugar de tener secuencias μop rígidas que controlan la CPU directamente desde un microcódigo- ROM , aquí se almacenan dinámicamente μops para reprogramarlas antes de ser ejecutadas. [4] : 6–7, 9–11
Este almacenamiento en búfer significa 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. Como esto permite cierto grado de libertad con respecto al orden de ejecución, hace posible alguna extracción de paralelismo a nivel de instrucción de un programa normal de un solo subproceso (siempre que se verifiquen las dependencias, etc.). Se abre para más análisis y, por lo tanto, también para reordenar secuencias de código para optimizar dinámicamente el mapeo y la programación de μops en los recursos de la máquina (como ALU , unidades de carga / almacenamiento, etc.). Como esto sucede en el nivel de μop, las suboperaciones de diferentes instrucciones de máquina (macro) a menudo pueden entremezclarse en una secuencia de μop particular, formando instrucciones de máquina parcialmente reordenadas como consecuencia directa del envío desordenado de microinstrucciones de varios instrucciones macro. Sin embargo, esto no es lo mismo que la fusión de micro-operaciones , que apunta al hecho de que una microinstrucción más compleja puede reemplazar algunas microinstrucciones más simples en ciertos casos, típicamente para minimizar los cambios de estado y el uso de la cola y reordenar. espacio de búfer , reduciendo así el consumo de energía. La fusión micro-op se utiliza en algunos diseños de CPU modernos. [3] : 89–91, 105–106 [4] : 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 la máquina en una serie de μops, sino que también hacen lo contrario cuando es apropiado; combinan ciertas secuencias de instrucciones de la máquina (como una comparación seguida de un salto condicional) en un μop más complejo que se ajusta mejor al modelo de ejecución y, por lo tanto, se puede ejecutar más rápido o con menos recursos de la máquina involucrados. Esto también se conoce como fusión macro-operativa . [3] : 106-107 [4] : 12-13
Otra forma de intentar mejorar el rendimiento es almacenar en caché las microoperaciones decodificadas, de modo que si se vuelve a ejecutar la misma macroinstrucción, el procesador pueda acceder directamente a las microoperaciones decodificadas desde una caché especial, en lugar de decodificarlas nuevamente. La caché de seguimiento de ejecución que se encuentra en la microarquitectura Intel NetBurst ( Pentium 4 ) es un ejemplo generalizado de esta técnica. [5] El tamaño de esta caché puede expresarse en términos de cuántos miles (o estrictamente múltiplos de 1024) de microoperaciones puede almacenar: Kμops . [6]
Ver también
Referencias
- ^ a b "Organización y arquitectura de la computadora, capítulo 15. Operación de la unidad de control" (PDF) . umcs.maine.edu . 2010-03-16 . Consultado el 29 de diciembre de 2014 .
- ^ Microcircuito FM1600B Computadora 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) desde el original el 19 de mayo de 2020 . Consultado el 19 de mayo de 2020 .
- ^ a b c Agner Fog (19 de febrero de 2014). "La microarquitectura de las CPU Intel, AMD y VIA: una guía de optimización para programadores de ensamblajes y fabricantes de compiladores" (PDF) . agner.org . Consultado el 21 de marzo de 2014 .
- ^ a b c Michael E. Thomadakis (17 de marzo de 2011). "La arquitectura del procesador Nehalem y las plataformas SMP Nehalem-EP" (PDF) . Universidad Texas A & M. Archivado desde el original (PDF) el 11 de agosto de 2014 . Consultado el 21 de marzo de 2014 .
- ^ "Intel Pentium 4 1.4GHz y 1.5GHz" . AnandTech. 2000-11-20 . Consultado el 6 de octubre de 2013 .
- ^ Baruch Solomon; Avi Mendelson; Doron Orenstein; Yoav Almog; Ronny Ronen (agosto de 2001). "Caché de microoperaciones: una interfaz de potencia para ISA de longitud de instrucción variable" (PDF) . Intel . doi : 10.1109 / LPE.2001.945363 . Consultado el 21 de marzo de 2014 .