De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Un conjunto de instrucciones comprimido , o simplemente instrucciones comprimidas , son una variación en un microprocesador 's arquitectura del conjunto de instrucciones (ISA) que permite a las instrucciones a ser representados en un formato más compacto. En la mayoría de los ejemplos del mundo real, las instrucciones comprimidas tienen una longitud de 16 bits en un procesador que de otro modo utilizaría instrucciones de 32 bits. Es distinto del concepto de instrucciones de longitud variable , donde cualquier instrucción puede tener cualquier longitud; en un conjunto comprimido, las instrucciones son formas alternativas para las versiones de 32 bits existentes.

El concepto fue introducido originalmente en la década de 1980 por Hitachi como una forma de mejorar la densidad de código del diseño de su procesador SuperH RISC y, por lo tanto, permitir que los programas se ejecuten en cantidades más pequeñas de memoria principal . Hoy en día, estas instrucciones más pequeñas se conocen como SHcompact. Como la memoria incluso de los sistemas más pequeños es ahora órdenes de magnitud mayor, esta ya no es la principal preocupación; hoy la ventaja es que reduce el número de accesos a la memoria principal y, por tanto, reduce el uso de energía en los dispositivos móviles . Las patentes de Hitachi fueron licenciadas por Arm Ltd. para sus procesadores, donde se conocía como "Thumb". Se encuentran sistemas similares en MIPS16e y Power ISA.

La introducción de la informática de 64 bits ha llevado a que el término ya no se utilice tan ampliamente; estos procesadores generalmente usan instrucciones de 32 bits y técnicamente son una forma de ISA comprimido, pero como en su mayoría son versiones modificadas de un ISA antiguo de 32 bits de una versión de 32 bits de la misma familia de procesadores; no hay una compresión real. Las patentes originales han expirado y el concepto se puede encontrar en varios diseños modernos, incluido el RISC-V , que fue diseñado desde el principio para usarlo.

Concepto [ editar ]

Los microprocesadores codifican sus instrucciones como una serie de bits , normalmente divididos en un número de bytes de 8 bits . Por ejemplo, en el MOS 6502 , la ADCinstrucción realiza una suma binaria entre un valor de operando y el valor ya almacenado en el acumulador . Hay una variedad de lugares donde el procesador puede encontrar el operando; podría estar ubicado en la memoria principal , o en la página especial cero , o ser una constante explícita como "10". Cada una de estas variaciones utilizó una instrucción o código de operación de 8 bits diferente ; si uno quisiera agregar la constante $ 04 al acumulador, la instrucción se codificaría en la memoria como$69 $04, mientras que si estuviera agregando el valor almacenado en la memoria principal en la ubicación $ 4400, lo sería $6D $0044, con una pequeña dirección endian . [1]

Tenga en cuenta que la segunda instrucción requiere tres bytes porque la dirección de memoria tiene una longitud de 16 bits. Dependiendo de la instrucción, puede usar uno, dos o tres bytes. [1] Esto ahora se conoce como un conjunto de instrucciones de longitud variable , aunque ese término no era común en ese momento ya que la mayoría de los procesadores, incluidos los mainframes y las minicomputadoras , usaban alguna variación de este concepto. Incluso a fines de la década de 1970, cuando los microprocesadores comenzaron a pasar de formatos de 8 bits a 16, este concepto siguió siendo común; el Intel 8088 continuó usando códigos de operación de 8 bits que podrían ir seguidos de cero a seis bytes adicionales dependiendo del modo de direccionamiento . [2]

Fue durante el cambio a sistemas de 32 bits, y especialmente cuando el concepto RISC comenzó a hacerse cargo del diseño del procesador, que las instrucciones de longitud variable comenzaron a desaparecer. En la arquitectura MIPS , por ejemplo, todas las instrucciones tienen un único valor de 32 bits, con un código de operación de 6 bits en los bits más significativos.y los 26 bits restantes se utilizan de diversas formas que representan su conjunto limitado de modos de direccionamiento. La mayoría de los diseños de RISC son similares. Pasar a un formato de instrucción de longitud fija fue uno de los conceptos de diseño clave detrás del desempeño de los primeros diseños de RISC; en los sistemas anteriores, la instrucción podía tardar de uno a seis ciclos de memoria en leerse, lo que requería cableado entre varias partes de la lógica para garantizar que el procesador no intentara ejecutar la instrucción antes de que los datos estuvieran listos. En los diseños RISC, las operaciones normalmente toman un ciclo, lo que simplifica enormemente la decodificación. Los ahorros en estos circuitos de enclavamiento se aplican en cambio a la lógica adicional o la adición de registros de procesador , que tienen un impacto directo en el rendimiento. [3]

Densidad de código [ editar ]

La desventaja del enfoque RISC es que muchas instrucciones simplemente no requieren cuatro bytes. Por ejemplo, la instrucción Logical Shift Left desplaza los bits de un registro a la izquierda y solo requiere el código de operación de la instrucción y un número de registro. En el 6502, que tiene un solo registro aritmético A y, por lo tanto, ni siquiera necesita un número de registro, la ASLinstrucción ocupa un byte. [1]En teoría, MIPS solo necesita un código de operación de 6 bits y un número de registro de 5 bits para esta misma operación y, en teoría, podría ajustar la instrucción en un valor de 16 bits. Pero como es el caso de la mayoría de los diseños RISC, la instrucción todavía ocupa 32 bits completos. Como este tipo de instrucciones son relativamente comunes, los programas RISC generalmente ocupan más memoria que el mismo programa en un procesador de longitud variable. [4]

En la década de 1980, cuando surgió por primera vez el concepto RISC, este era un punto común de queja. A medida que las instrucciones ocuparan más espacio, el sistema tendría que dedicar más tiempo a leer las instrucciones de la memoria. Se sugirió que estos accesos adicionales podrían ralentizar el programa. Una evaluación comparativa exhaustiva finalmente demostró que RISC era más rápido en casi todos los casos, y este argumento se desvaneció. Sin embargo, hay casos en los que el uso de la memoria sigue siendo una preocupación independientemente del rendimiento, y eso es en sistemas pequeños y aplicaciones integradas. Incluso a principios de la década de 2000, el precio de la DRAM era suficiente para que los dispositivos sensibles al costo tuvieran memoria limitada. Fue para este mercado que Hitachi desarrolló el diseño SuperH . [5]

En los diseños anteriores de SuperH, SH-1 a SH-4, las instrucciones siempre ocupan 16 bits. El conjunto de instrucciones resultante tiene limitaciones del mundo real; por ejemplo, solo puede realizar operaciones matemáticas de dos operandos de la forma A = A + B, mientras que la mayoría de los procesadores de la época permitían A = B + Cel formato de tres operandos. Al eliminar un operando, se eliminan cuatro bits de la instrucción (hay 16 registros, que necesitan 4 bits), aunque esto tiene el costo de hacer que el código matemático sea algo más complejo de escribir. Para los mercados a los que apunta el SuperH, esta fue una compensación fácil de hacer. Una ventaja significativa del formato de 16 bits es que la caché de instrucciones ahora contiene el doble de instrucciones para cualquier cantidad dada de SRAM.. Esto permite que el sistema funcione a velocidades más altas, aunque parte de eso podría mitigarse mediante el uso de instrucciones adicionales necesarias para realizar operaciones que podrían realizarse con una sola instrucción de 3 operandos. [6]

Para el SH-5, Hitachi pasó a un formato de instrucción de 32 bits. Para proporcionar compatibilidad con versiones anteriores de sus diseños anteriores, incluyeron un segundo conjunto de instrucciones, SHcompact. SHcompact asignó las instrucciones originales de 16 bits unidireccionales a la instrucción interna de 32 bits; no realizaba múltiples instrucciones como sería el caso en procesadores microcodificados anteriores , era simplemente un formato más pequeño para la misma instrucción. Esto permitió que los programas originales de pequeño formato se portaran fácilmente al nuevo SH-5, mientras que añadía poco a la complejidad del decodificador de instrucciones . [7]

ARM obtuvo la licencia de varias patentes de Hitachi sobre aspectos del diseño de instrucciones y las utilizó para implementar sus instrucciones Thumb. Los procesadores ARM con una "T" en el nombre incluían este conjunto de instrucciones además de sus versiones originales de 32 bits, y podían cambiarse de modo de 32 a 16 bits sobre la marcha usando el BXcomando. Cuando está en el modo Thumb, solo los ocho registros superiores de los dieciséis registros normales del ARM son visibles, pero estos son los mismos registros que en el modo de 32 bits y, por lo tanto, los datos se pueden pasar entre Thumb y código normal usando esos registros. Cada instrucción de Thumb era una contraparte de una versión de 32 bits, por lo que Thumb era un subconjunto estricto de la ISA original. [8]Una diferencia clave entre el modelo de ARM y SuperH es que Thumb retiene algunas instrucciones de tres operandos en el formato de 16 bits, lo que logró reduciendo el archivo de registro visible a ocho, por lo que solo se requieren 3 bits para seleccionar un registro. [9]

La arquitectura MIPS también agregó un conjunto comprimido similar en su MIPS16e, que es muy similar a Thumb. También permite utilizar sólo ocho registros, aunque estos no son simplemente los primeros ocho; el diseño MIPS utiliza el registro 0 como registro cero , por lo que los registros 0 y 1 en el modo de 16 bits se asignan en cambio a los registros MIPS32 16 y 17. La mayoría de los demás detalles del sistema son similares a Thumb. [10] Asimismo, la última versión de Power ISA , anteriormente PowerPC , incluye las instrucciones "VLE" que son esencialmente idénticas. Estos se agregaron a instancias de Freescale Semiconductor , cuyo interés en Power está principalmente dirigido al mercado integrado. [11]

Uso moderno [ editar ]

A partir de 2015, muchos procesadores se han trasladado a un formato de 64 bits. Estos generalmente retuvieron un formato de instrucción de 32 bits, mientras expandían los registros internos a un formato de 64 bits. Según la definición original, estas son instrucciones comprimidas, ya que son más pequeñas que el tamaño de la palabra de datos básica. Sin embargo, este término no se utiliza en este contexto, las referencias a instrucciones comprimidas se refieren invariablemente a versiones de 16 bits. [12]

Referencias [ editar ]

Citas [ editar ]

  1. ^ a b c Verts, 2004 .
  2. ^ "Comprensión de las arquitecturas ARM" . informIT . 23 de agosto de 2010.
  3. ^ Tocino, Jason. "Formatos de código de instrucción MIPS" . Ciencias de la Computación 315 Notas de clase .
  4. ^ Weaver y McKee 2009 .
  5. ^ "Efectos de las instrucciones de 16 bits" . Renesas .
  6. ^ SuperH 1996 .
  7. ^ Núcleo de CPU SH-5, Volumen 1: Arquitectura (PDF) . pag. 8.
  8. ^ Lemieux 2004 .
  9. ^ "Resumen de instrucciones de pulgar" . ARM7TDMI Manual de referencia técnica .
  10. ^ Manual de referencia técnica de extensión específica de la aplicación MIPS16e2 . MIPS. 26 de abril de 2016.
  11. ^ Potencia ISA V2.07 . IBM.
  12. ^ Manual de arquitectura Alpha (PDF) . DIC. Octubre de 1996. p. 1.4.

Bibliografía [ editar ]

  • Weaver, Vincent; McKee, Sally (2009). Preocupaciones por la densidad del código para nuevas arquitecturas (PDF) . ICCD 2009.
  • Verts, William (30 de enero de 2004). "El procesador 6502" (PDF) . Universidad de Massachusetts .
  • Lemieux, Joe (24 de septiembre de 2004). "Introducción al pulgar ARM" . incrustado .
  • Motor SuperH RISC SH-1 / SH-2 (PDF) . Hitachi America. 3 de septiembre de 1996.