Almacenamiento de trabajo de rápido acceso disponible como parte de un procesador digital
Un registro de procesador es una ubicación de acceso rápido disponible para el procesador de una computadora . [1] Los registros generalmente consisten en una pequeña cantidad de almacenamiento rápido , aunque algunos registros tienen funciones de hardware específicas y pueden ser de solo lectura o solo escritura. En la arquitectura de computadoras , los registros generalmente se direccionan mediante mecanismos distintos a la memoria principal , pero en algunos casos se les puede asignar una dirección de memoria, por ejemplo, DEC PDP-10 , ICT 1900. [ 2]
Casi todas las computadoras, ya sea que tengan arquitectura de carga/almacenamiento o no, cargan elementos de datos desde una memoria más grande en registros donde se usan para operaciones aritméticas , operaciones bit a bit y otras operaciones, y son manipulados o probados por instrucciones de máquina . Los elementos manipulados luego suelen almacenarse nuevamente en la memoria principal, ya sea por la misma instrucción o por una posterior. Los procesadores modernos usan RAM estática o dinámica como memoria principal, y a esta última generalmente se accede a través de uno o más niveles de caché .
Los registros del procesador normalmente se encuentran en la parte superior de la jerarquía de memoria y proporcionan la forma más rápida de acceder a los datos. El término normalmente se refiere solo al grupo de registros que están codificados directamente como parte de una instrucción, según lo definido por el conjunto de instrucciones . Sin embargo, las CPU modernas de alto rendimiento a menudo tienen duplicados de estos "registros arquitectónicos" para mejorar el rendimiento mediante el cambio de nombre de los registros , lo que permite la ejecución paralela y especulativa . El diseño x86 moderno adquirió estas técnicas alrededor de 1995 con los lanzamientos de Pentium Pro , Cyrix 6x86 , Nx586 y AMD K5 .
Los registros se miden normalmente por el número de bits que pueden almacenar, por ejemplo, un " registro de 8 bits ", " registro de 32 bits ", " registro de 64 bits ", o incluso más. En algunos conjuntos de instrucciones , los registros pueden operar en varios modos, dividiendo su memoria de almacenamiento en partes más pequeñas (32 bits en cuatro de 8 bits, por ejemplo) en las que se pueden cargar y operar múltiples datos (vector o matriz unidimensional de datos) al mismo tiempo. Por lo general, se implementa agregando registros adicionales que mapean su memoria en un registro más grande. Los procesadores que tienen la capacidad de ejecutar instrucciones individuales en múltiples datos se denominan procesadores vectoriales .
Tipos
Un procesador a menudo contiene varios tipos de registros, que pueden clasificarse según los tipos de valores que pueden almacenar o las instrucciones que operan sobre ellos:
Los registros accesibles al usuario pueden leerse o escribirse mediante instrucciones de máquina. La división más común de los registros accesibles al usuario es la división en registros de datos y registros de direcciones.
Los registros de direcciones contienendireccionesy son utilizados por instrucciones que acceden indirectamente ala memoria primaria.
Algunos procesadores contienen registros que solo se pueden usar para almacenar una dirección o solo para almacenar valores numéricos (en algunos casos se usan como un registro de índice cuyo valor se agrega como un desplazamiento desde alguna dirección); otros permiten que los registros almacenen cualquier tipo de cantidad. Existe una amplia variedad de modos de direccionamiento posibles , que se usan para especificar la dirección efectiva de un operando.
Registros de propósito general (Los GPR pueden almacenar tanto datos como direcciones, es decir, son registros combinados de datos/direcciones; en algunas arquitecturas, elarchivo de registrosestáunificadopara que los GPR también puedan almacenar números de punto flotante.
Los registros de punto flotante (FPR) almacenan números de punto flotante en muchas arquitecturas.
Los registros constantes contienen valores de solo lectura, como cero, uno opi.
Los registros vectoriales contienen datos parael procesamiento vectorialrealizado medianteSIMD(instrucción única, datos múltiples).
Los registros de propósito especial ( SPR ) contienen algunos elementos del estado del programa ; por lo general, incluyen el contador de programa , también llamado puntero de instrucción, y el registro de estado ; el contador de programa y el registro de estado pueden combinarse en un registro de palabra de estado de programa (PSW). El puntero de pila mencionado anteriormente a veces también se incluye en este grupo. Los microprocesadores integrados también pueden tener registros correspondientes a elementos de hardware especializados.
Los registros específicos del modelo (también denominadosregistros específicos de la máquina) almacenan datos y configuraciones relacionadas con el procesador en sí. Debido a que sus significados están ligados al diseño de un procesador específico, no se espera que sigan siendo estándar entre generaciones de procesadores.
Registros arquitectónicosSon los registros visibles para el software y están definidos por una arquitectura. Es posible que no correspondan al hardware físico si el cambio de nombre de los registros lo realiza el hardware subyacente.
En algunas arquitecturas (como SPARC y MIPS ), el primer o último registro del archivo de registros enteros es un pseudorregistro , ya que está programado para devolver siempre cero cuando se lee (principalmente para simplificar los modos de indexación) y no se puede sobrescribir. En Alpha , esto también se hace para el archivo de registros de punto flotante. Como resultado de esto, los archivos de registros se citan comúnmente como si tuvieran un registro más de la cantidad de ellos que son realmente utilizables; por ejemplo, se citan 32 registros cuando solo 31 de ellos encajan en la definición anterior de un registro.
Ejemplos
La siguiente tabla muestra la cantidad de registros en varias arquitecturas de CPU convencionales. Tenga en cuenta que en los procesadores compatibles con x86 , el puntero de pila ( ESP) se considera un registro entero, aunque existe una cantidad limitada de instrucciones que se pueden usar para operar sobre su contenido. Se aplican advertencias similares a la mayoría de las arquitecturas.
Aunque todas las arquitecturas que se enumeran a continuación son diferentes, casi todas se encuentran en una disposición básica conocida como arquitectura de von Neumann , propuesta por primera vez por el matemático húngaro-estadounidense John von Neumann . También es digno de mención que la cantidad de registros en las GPU es mucho mayor que en las CPU.
Uso
La cantidad de registros disponibles en un procesador y las operaciones que se pueden realizar utilizando esos registros tienen un impacto significativo en la eficiencia del código generado por los compiladores optimizadores . El número de Strahler de un árbol de expresión proporciona la cantidad mínima de registros necesarios para evaluar ese árbol de expresión.
^ "¿Qué es un registro de procesador?". Educativo: Cursos interactivos para desarrolladores de software . Consultado el 12 de agosto de 2022 .
^ "Un estudio de técnicas para diseñar y gestionar archivos de registros de CPU".
^ "Manual de referencia del hardware del sistema informático Cray-1" (PDF) . Cray Research . Noviembre de 1977. Archivado (PDF) desde el original el 2021-11-07 . Consultado el 2022-12-23 .
^ "Manual del usuario del conjunto de microcomputadoras MCS-4" (PDF) . Intel. Febrero de 1973.
^ "8008 8 Bit Parallel Central Processor Unit Users Manual" (PDF) . Intel. Noviembre de 1973 . Consultado el 23 de enero de 2014 .
^ "Manual del usuario de los sistemas de microcomputadoras Intel 8080" (PDF) . Intel. Septiembre de 1975 . Consultado el 23 de enero de 2014 .
^ "Manual de referencia del programador de 80286 y 80287" (PDF) . Intel. 1987.
^ ab "Manuales para desarrolladores de software de arquitecturas Intel 64 e IA-32". Intel. 4 de diciembre de 2019.
^ "Manual del programador de la arquitectura AMD64, volumen 1: Programación de aplicaciones" (PDF) . AMD . Octubre de 2013.
^ "Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel y características futuras" (PDF) . Intel . Enero de 2018.
^ Guía de programación F8 (PDF) . División de microcomputadoras Fairchild MOS. 1977.
^ "Guía de referencia del procesador Nios II Classic" (PDF) . Altera . 2 de abril de 2015.
^ "Guía de referencia del procesador Nios II Gen2" (PDF) . Altera. 2 de abril de 2015.
^ "Manual de referencia de programación M6800" (PDF) . Motorola . Noviembre de 1976 . Consultado el 18 de mayo de 2015 .
^ "Manual de referencia del programador de la familia Motorola M68000" (PDF) . Motorola. 1992 . Consultado el 13 de junio de 2015 .
^ "Guía de programación CUDA C". Nvidia. 2019. Consultado el 9 de enero de 2020 .
^ Jia, Zhe; Maggioni, Marco; Staiger, Benjamín; Scarpazza, Daniele P. (2018). "Disección de la arquitectura de la GPU NVIDIA Volta mediante microbenchmarking". arXiv : 1804.06826 [cs.DC].
^ "Arquitectura de sistemas empresariales IBM/370 y System/370 - Operaciones vectoriales" (PDF) . IBM. SA22-7125-3 . Consultado el 11 de mayo de 2020 .
^ "Arquitectura del conjunto de instrucciones de la unidad de procesamiento sinérgico versión 1.2" (PDF) . IBM. 27 de enero de 2007.
^ "Aprendiendo el ensamblaje 65816". Wiki de desarrollo de Super Famicom . Consultado el 14 de noviembre de 2019 .
^ "Estándar de llamada a procedimientos para la arquitectura ARM" (PDF) . ARM Holdings . 30 de noviembre de 2013 . Consultado el 27 de mayo de 2013 .
^ "2.6.2. El conjunto de registros de estado del pulgar". Manual de referencia técnica ARM7TDMI . ARM Holdings .
^ "Estándar de llamada a procedimiento para la arquitectura ARM de 64 bits" (PDF) . ARM Holdings. 22 de mayo de 2013 . Consultado el 27 de mayo de 2013 .
^ "Referencia de arquitectura de la Epifanía" (PDF) .