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.