Teoricamente, os registros não são necessários; todos os microprocessadores ainda funcionariam sem registros. Mas essa adição aparentemente trivial ajudou a tornar os microprocessadores mais eficientes.
Por que não podemos ter mais registros para extrair mais benefícios deles? Eles são apenas memória no chip e pode-se imaginar não muito difícil de adicionar? Que fator influenciou o número de registros para ser o que são agora e não, digamos, 10x mais?
microprocessor
Darshan Chaudhary
fonte
fonte
Respostas:
Existem vários fatores:
microarquiteturas de alto desempenho usam renomeação de registros. Ou seja, o número de registros físicos é maior que o número de registros arquiteturalmente visíveis e eles são capazes de rastrear usos independentes deles.
dobrar o número de registros não duplica o desempenho. O ISTR (da arquitetura de computadores, Uma abordagem quantitativa ) que passa de 16 para 32 registradores traz algo como uma melhoria de 10%, assumindo que o aumento não tenha efeito adverso (que é uma suposição muito otimista).
registros arquitetonicamente visíveis têm custos. Por exemplo:
fonte
Embora os registros e a RAM sejam ambos memória, eles são acessados de maneiras diferentes, para refletir o custo (na área de chip ou de ciclos de clock ocultos) de acessá-los.
Os registros estão fortemente vinculados à ALU e podem assumir muitas funções de fontes de dados, coletores, modificadores etc. Portanto, eles precisam de uma grande variedade de conexões multiplexadas. Em algumas arquiteturas, podemos escrever R1 <= R2 + R3, e é exatamente isso que acontece em um único ciclo de clock. Cada registro é endereçado diretamente no código operacional, esse endereçamento é um recurso muito limitado.
Como os registros são caros de implementar, o número geralmente é limitado à ordem de 10/20 na maioria das arquiteturas.
A RAM está fracamente ligada à CPU, geralmente sendo canalizada através de uma única conexão compartilhada. Isso torna muito mais barato implementar uma grande quantidade de RAM. Os endereços de RAM geralmente vêm de um endereço armazenado em um registro, portanto, não consuma uma largura significativa de instruções.
O SPARC é uma arquitetura interessante, com registros de 72 a 640 de 64 bits, com um contexto de 32 registros que pode ser alterado com sobreposições para chamadas rápidas de sub-rotina com passagem de parâmetros. Você costuma não encontrá-los em PCs e servidores onde os custos importam, como em 99,999% dos aplicativos.
fonte
Os registros devem ser endereçados dentro da instrução. Se houver muitos registros, a instrução será mais longa. Salvar e restaurar o conteúdo do registro para um serviço de interrupção precisa de mais tempo, se houver muitos registros.
fonte
Como muitas coisas, o número de registros é um compromisso entre custo, complexidade e utilidade.
Os registros são implementados como RAM estática de várias portas, o que os torna mais caros (área de chip) do que outras opções de armazenamento.
Em seguida, eles são acoplados ao conjunto de instruções do processador, aumentando o número de registros aumenta a complexidade do conjunto de instruções. Portanto, se você deseja permanecer compatível com o conjunto de instruções, não pode simplesmente aumentar o número de registros disponíveis na próxima geração de processadores para aumentar a eficiência, os programas não os usariam.
Em seguida, quantos registros você realmente precisa? Há um limite para a sua utilidade. Considere que você escreve um algoritmo que executa alguma operação matemática em 1024 bytes, digamos multiplicar por 5. Com a contagem atual de registros, você acaba com algo como:
Agora, se você tivesse 1024 registros e todos os dados armazenados lá, seu programa seria semelhante a:
Como cada uma delas é uma instrução diferente, cada uma delas deve ser escrita. Portanto, a memória necessária do programa está explodindo. Depois de perceber isso, você pode querer introduzir algumas instruções como
multiply register1 with register(2 to 256)
,. Mas quando você para, você fornece uma instrução para todas as combinações?Portanto, talvez os números que temos atualmente sejam uma boa troca entre custo, complexidade e utilidade.
fonte
multiply Register1 with Register2 multiply Register1 with Register3
é muito irreal, pois os dados devem ter vindo direta ou indiretamente de fora do computador, para que os registros precisem ser carregados e os resultados precisem ser usados em algum lugar, direta ou indiretamente, para que os registros precisem ser armazenados. Na realidade, um compilador de otimização decente para uma linguagem de alto nível 'desenrola' o loop do primeiro programa para criar algo como o segundo programa, otimizando o uso de registros, latência de memória, talvez ocupação de cache e velocidade de execução.multiply register1 with register(2 to 256)
instruções para fins especiais . O pipelining melhora significativamente o rendimento da CPU, especialmente para decodificar e executar instruções. Portanto, o efeito de instruções complexas e massivas de variedade pode ser alcançado usando várias instruções mais simples com uma taxa de execução mais alta. Ter um número maior de registros ajuda a permitir que o compilador gere muitas instruções independentes (aquelas que não compartilham um registro), que podem ser concluídas independentemente, melhorando a taxa de transferência. Seu exemplo = mais registros são melhores.Registros são muito caros. Muito caro. Não são apenas os registros, são todas as conexões de e para os registros. Digamos que você tenha uma instrução reg1 = reg2 + reg3. Para implementar isso rapidamente , você precisa ler os dados de dois registros em um ciclo e gravar em outro registro no segundo ciclo. Agora, se você possui um processador que pode executar várias instruções por ciclo, digamos três instruções, seria necessário ler dados de seis registros a cada ciclo e gravar dados em três registros. É uma quantidade enorme de conexões muito rápidas.
Claro que você pode apenas usar mais transistores. O problema é: a velocidade diminui. Você precisa de mais hardware para escolher entre mais registros. O espaço para o arquivo de registro aumenta. Tudo isso torna as coisas mais lentas. Portanto, com a mesma tecnologia, você poderá ter 16 registros e executar a 2.600 MHz ou 32 registros e executar a 2.400 MHz. Agora, os registros adicionais devem compensar uma queda significativa na velocidade do relógio.
fonte
- Hierarquia de memória
Registros, cache e RAM são implementados com diferentes tecnologias de armazenamento.
Diferentes tecnologias diferem em
Um exemplo: Os registros internos encontrados em uma CPU são a Memória de acesso aleatório estático , enquanto a memória principal do computador é Memória de acesso aleatório dinâmico
Uma célula binária de RAM estática é implementada usando um circuito de 6 transistores, enquanto uma célula binária de RAM dinâmica é implementada usando um capacitor e um transistor. Comparando SRAM e DRAM
Portanto, não é prático aumentar o número de memória rápida, cara e com menos densidade. De fato, podemos usar alguns deles, e um programa bem escrito armazenará os dados usados com mais frequência dentro desses registros rápidos, enquanto os dados usados com menos frequência são armazenados na memória mais lenta.
- comprimento da instrução
O endereço dos registradores está incluído em uma instrução, que limita o número de registradores acessíveis com base nos números de bits que podem representar o endereço. Por exemplo, na arquitetura MIPS, a instrução de comprimento de 32 bits contém apenas 5 bits para representar o endereço dos registradores acessíveis, o que limita o número de registradores a 2 5 = 32. Aumentar o número de registradores exigiria aumentar o comprimento da instrução para incluir bits suficientes que poderiam acessar todos os registradores.
fonte
Se você der uma olhada no conjunto de instruções de um processador, existem várias maneiras de agrupá-los. Por exemplo, todas as
ADD
instruções podem ser agrupadas e todas asXOR
instruções.Dentro de cada grupo da mesma instrução, pode haver versões que operam na memória ou nos registradores. É esse subgrupo que define efetivamente o número de registros que o processador possui.
Como um exemplo hipotético de 8 bits, digamos que as
$Ax
instruções possam ser asADD
instruções e$Cx
possam ser asXOR
instruções. Com esse design, restam apenas quatro bits para definir os operandos!$x0
pode ser o próprio acumulador).Obviamente, passamos pelos conjuntos de instruções de 8 bits. Mas, ainda assim, essa lógica ajudou a definir conjuntos de registros no passado - continuará a fazê-lo no futuro.
EDITAR (conforme solicitado)
Dizem os quatro primeiros bits são para a instrução:
ADD
,SUB
,XOR
,MOV
,CMP
etc. Há 16 possibilidades aqui. Então, para as instruções em que o registro para registro faz sentido (por exemploADD Rx,Ry
), você precisa especificarRx
eRy
. Digamos que os próximos dois bits sejam parax
, e os dois últimos sejam paray
. Portanto:Com apenas dois bits para definir um registro como este, você só tem espaço para um total de quatro registros!
Como um aparte, você notará que algumas combinações de registradores não fazem sentido. Por exemplo,
MOV Rx, Rx
(não faz nada) eSUB Rx, Rx
(sempre produz0
). Estas podem se tornar instruções de casos especiais:SUB Rx, Rx
poderia se tornarNOT Rx
- uma instrução de um único operando.MOV Rx, Rx
pode se tornar umaMOV
instrução que leva um segundo byte como um valor imediato, interpretado comoMOV Rx, #$yy
.Dessa forma, você pode "brincar" com o mapa de instruções, preenchendo os buracos para obter instruções inúteis ou sem sentido para fornecer um conjunto maior de instruções para o programador. Mas, finalmente, o conjunto de instruções define o conjunto de registradores.
fonte
Atualmente, a Intel está usando milhares de registros - centenas por núcleo de CPU. Mas a maior quantidade de dados armazenados em uma CPU está no cache, que indiretamente responde à pergunta. O cache é organizado em camadas, com um pequeno cache L1 rápido e caches L2 e L3 mais lentos. Em certo sentido, o arquivo de registro é L0, ainda mais rápido que L1, mas também menor. Portanto, você poderia aumentar o número de registros, mas isso provavelmente os atrasaria.
fonte