O que significa bancário quando aplicado a registros?

13

Esta resposta a uma pergunta no StackOverflow sobre o que significa bancário no contexto dos registros bancários da ARM indica que há alguma confusão sobre o significado de banco quando aplicado a registros.

O que significa bancário com relação a registros?

Paul A. Clayton
fonte

Respostas:

16

A palavra bancário é usada em dois sentidos diferentes quando aplicada a registros.

Registros bancários para tratamento de interrupções

O sentido com o qual a questão StackOverflow está relacionada é semelhante ao uso na comutação de banco (de memória) (usada por alguns processadores de 8 e 16 bits) na função . Os nomes de uma coleção de registros são mapeados para uma coleção diferente de registros físicos. O ARMv7 fornece um banco extra para 7 de seus 16 GPRs e mais cinco bancos para o registro do ponteiro de pilha e o registro de link (o ARM usa o registro de link para salvar o PC a ser usado para retornar da interrupção). O Itanium fornece um banco extra para 16 de seus 31 GPRs estáticos. (O MIPS fornece conjuntos inteiros de 31 GPRs, chamando-os de "conjuntos de registros de sombra".)

Diferentemente da troca de banco de memória, o objetivo principal desse tipo de banco de registro é (normalmente) não estender o armazenamento endereçável, mas fornecer manipulação mais rápida de interrupções, evitando a necessidade de salvar valores de registro, carregar valores usados ​​pelo manipulador de interrupções e restaurar o original registrar valores e simplificar a manipulação de interrupções.

(O uso da pilha do aplicativo para salvar o estado do registro abre a possibilidade de transbordar a memória alocada para essa pilha, gerando uma exceção que deve então lidar com a economia do estado de alguma forma. Pior ainda, se a página da memória imediatamente acima do limite da pilha puder ser gravada pelo privilégio escalado do manipulador de interrupção, mas não pelo aplicativo, o aplicativo está gravando efetivamente em uma página na qual não possui permissão de gravação.Algumas ABIs evitam esse problema definindo um ou mais registros como voláteis entre interrupções, o que permite a interrupção manipulador para carregar um ponteiro para salvar o estado sem atrapalhar o estado do aplicativo, mas, diferentemente dos registros bancários, esses registros voláteis de interrupção definidos pelo software não podem ser considerados inalteráveis ​​pelo software do aplicativo.)

(O uso de bancos de registros como janelas fixas foi proposto para aumentar o número de registros disponíveis, por exemplo, "Aumentando o número de registros efetivos em um processador de baixa potência usando um arquivo de registro com janelas", Rajiv A. Ravindran et al., 2003. Também se pode notar uma semelhança com a pilha de registradores usada para evitar a sobrecarga de registro e restauração de chamadas de função, como em Itanium e SPARC [que usa o termo "janelas de registro"], embora esses mecanismos normalmente alterem os nomes dos registros em vez de trocá-los Fora.)

Em termos de hardware, os registros bancários podem ser implementados renomeando-os na decodificação de instruções. Para o sistema bancário relativamente complexo da ARM, esse provavelmente seria o mecanismo preferido. Para um sistema bancário mais simples como o usado pelo Itanium com um único banco extra com capacidade para dois números de registros, pode ser prático incorporar a renomeação na indexação do próprio arquivo de registro. (Obviamente, isso não seria compatível com certas formas de renomeação usadas para dar suporte à execução fora de ordem.)

Ao reconhecer que bancos diferentes não são acessados ​​ao mesmo tempo, uma otimização inteligente usando esse mecanismo pode reduzir a sobrecarga da área (limitada por fio) de um arquivo de registro altamente portado usando "registros 3D". (Essa técnica foi proposta no contexto das janelas de registro do SPARC - "Um arquivo de registro tridimensional para processadores superescalares", Tremblay et al., 1995 - e uma variante foi usada pela Intel para o SoEMT - "O Multi-Threaded, protegido por paridade Arquivos de registro de 128 palavras em um processador da família Itanium de núcleo duplo "(Fetzer et al., 2005.)

Serviços bancários para aumentar o número de acessos possíveis

O segundo sentido em que o termo bancário é usado para registros refere-se à divisão de um conjunto de registros em grupos (bancos), cada um dos quais pode ser acessado em paralelo. O uso de quatro bancos aumenta o número máximo de acessos suportados por um fator de quatro, permitindo que cada banco suporte menos portas de acesso (reduzindo a área e o uso de energia) para uma determinada contagem efetiva de acessos. No entanto, na medida em que os acessos em um determinado ciclo não sejam distribuídos igualmente entre os bancos, o número máximo de acessos não será alcançado. Mesmo com um grande número de bancos em relação à contagem de acesso desejada, os conflitos bancários podem, na pior das hipóteses, limitar a contagem de acesso real ao número de portas fornecidas por um único banco.

Existem muitos trabalhos acadêmicos sobre arquivos de registros bancários ( pesquisa no Google Scholar) e várias técnicas gerais foram propostas para reduzir o impacto de conflitos bancários. A técnica mais óbvia é proteger as instruções (como é feito para execução fora de ordem), fornecendo uma média estatística dos conflitos bancários. Também é possível ler um operando de registro antes que a instrução esteja pronta para executar (por exemplo, se outro operando ainda não estiver pronto ou se um risco estrutural atrasar a execução). A alocação de registros nos bancos pode explorar informações sobre o uso esperado para reduzir a probabilidade de conflitos. (O software pode ajudar usando preferencialmente os registros da maneira esperada.) Usando nomes de registros físicos virtuais, é possível adiar a alocação de nomes de registros físicos (e, portanto, bancos) até que o valor seja armazenado no registro;

Esse tipo de banco às vezes é chamado de pseudo-multiportas, pois fornece a ilusão de um número maior de portas de acesso. Essa técnica é comumente usada para caches, pois a estrutura física geralmente é particionada em matrizes de memória separadas por outros motivos.

(Uma alternativa a esse sistema bancário é replicar o arquivo de registro. O uso de duas cópias do arquivo de registro permite que cada cópia exija metade do número de portas de leitura, embora seja necessário o mesmo número de portas de gravação. Essa técnica foi usada no POWER2 e no Alpha 21264 e é comumente usado em processadores de alto desempenho.)

Sumário

Pode ser útil distinguir esses dois tipos de banco como bancário temporal, no qual a seleção bancária se espalha ao longo do tempo (como os registros bancários da ARM para interrupções rápidas) e bancos espaciais nos quais o acesso ao banco pode ser simultâneo no tempo, mas distribuído espacialmente.

Os serviços bancários temporais normalmente são expostos ao software e são usados ​​para reduzir a sobrecarga (e complexidade) das interrupções. (Conceitualmente, a troca de encadeamentos em um processador Switch-on-Event-MultiThreaded é muito semelhante à interrupção de manipulação e pode usar mecanismos semelhantes para reduzir a sobrecarga.)

O sistema bancário espacial é menos frequentemente parte do ISA (embora o Itanium exigisse que os pares de registros de ponto flutuante de carga e armazenamento usassem números de registro pares e ímpares - o que não é garantido pelo uso da rotação de registros), permitindo um projeto trivial de dois bancos para fornecer o extra requisitos de acesso a arquivos de registro) e é usado para reduzir o custo de fornecer um número maior de acessos a registros por ciclo.

Paul A. Clayton
fonte