Se você não está particularmente interessado em computadores, seria perdoado por supor que as únicas formas de memória em um computador eram o disco rígido e a RAM. Aqueles de vocês com interesse em computadores provavelmente saberiam que esse não é o caso, e que o A CPU também possui um conjunto de caches que são usados para armazenar em cache os dados da RAM para que a CPU possa acessá-los mais rápido. Todos esses são recursos anunciados, principalmente porque a velocidade e/ou capacidade é um ponto de venda decente e geralmente afeta os níveis de desempenho.
Na verdade, há uma outra camada de memória. Por mais que você pense que o cache L1 é o mais próximo possível do núcleo de processamento real, há outra camada superior na hierarquia de memória. Estes são os registradores da CPU. A razão pela qual eles não são realmente anunciados ou mencionados é que eles não são realmente alterados. Tecnicamente, eles poderiam ser, no entanto, o número e o tamanho dos registradores são realmente fundamentais para a arquitetura. Isso significa que todas as CPUs x86-64 têm o mesmo número de registros. Eles não são comercializados porque não são um ponto concorrente.
O que faz um registrador?
Um registrador é um local de armazenamento rapidamente disponível para o processador. O acesso a um registrador é imediato com latência zero, enquanto mesmo o cache L1 tem uma latência de aproximadamente 4-5 ciclos em CPUs modernas. Esse imediatismo de acesso sugere o caso de uso para registradores. Os registradores são usados para armazenar as instruções que estão sendo operadas ativamente pela CPU. Eles também armazenam pontos de dados que devem ser processados. Alguns registros são de propósito geral, enquanto outros têm um propósito muito específico. Um exemplo de registrador de propósito especial seria o contador de programa que é onde o processador rastreia sua posição na sequência do programa.
Muitos registradores são considerados acessíveis ao usuário. Isso não significa que o usuário de um computador pode escolher qual valor colocar neles. Isso significa que o software em execução pode especificar os dados a serem carregados nesses registradores. Um número menor de registradores é interno, o que significa que o software não pode abordá-los. O registrador de instrução, que armazena a instrução que está sendo executada no momento, é um exemplo de registrador interno.
Renomeação de registro
Embora uma arquitetura de CPU possa permitir apenas uma única configuração de registradores, na verdade há um pouco de nuance nisso. Todas as CPUs modernas utilizam a renomeação de registradores. Esta é uma técnica em que você pode ter mais registradores físicos e usá-los para pré-carregar dados ou armazenar dados relacionados a uma instrução fora de ordem que, de outra forma, teria sido substituída. Quando a CPU chega ao ponto em que precisa dos dados nos registradores extras, ela simplesmente o renomeia para que seja endereçável, ao mesmo tempo em que torna um registrador endereçável anteriormente não endereçável.
O processo de renomeação de registradores pode ser muito útil para execução fora de ordem. Por exemplo, se um local de memória é programado para ser lido e depois gravado, e as instruções foram executadas nessa ordem, tudo bem. Se, no entanto, as instruções forem reordenadas para realizar a escrita primeiro, a instrução de leitura obterá o valor errado. Para evitar isso, o valor original a ser lido é armazenado em um registrador não utilizado que é renomeado quando a instrução relevante está sendo processada.
Conclusão
Os registradores são a camada mais alta na hierarquia de memória. Eles são a única parte diretamente endereçável pela CPU e não têm latência. Os registradores são usados para armazenar os dados que estão sendo executados ativamente pela CPU. Eles também são usados para armazenar outros pontos de dados, como o contador de programa que mantém o controle de qual instrução é a próxima a ser executada. Números muito limitados de registradores estão disponíveis com a arquitetura x86-64 com 16 registradores de uso geral e 16 ou 32 registradores de ponto flutuante dependendo se o AVX-512 é suportado.