RISC : caracteristicas de execução de instruções e uso de um banco grande de registradores | grupo 2 | pagina 2
Descripción
Mapa Mental sobre RISC : caracteristicas de execução de instruções e uso de um banco grande de registradores | grupo 2 | pagina 2, creado por Thiago Pena el 01/06/2022.
RISC : caracteristicas de execução de
instruções e uso de um banco grande
de registradores | grupo 2 | pagina 2
Uma das formas da evolução
associada a computadores são as
linguagens de programação.
Assim, o principal custo no ciclo
de vida de um sistema é o
software, não o hardware.
Somado ao custo e à
inconveniência, está o elemento
da falta de confiabilidade: é
comum que programas, tanto
sistemas como aplicações,
continuem a apresentar novas
falhas depois de anos de
operação.
A resposta dos
pesquisadores e da
indústria foi
desenvolver
linguagens de
programação de alto
nível ainda mais
poderosas e
complexas.
Esta solução trouxe outro problema,
conhecido como diferença semântica,
a diferença entre operações fornecidas
em linguagens de alto nível e aquelas
fornecidas na arquitetura do
computador.
Os projetistas responderam com
arquiteturas voltadas para acabar
com essa diferença. Principais
recursos incluem grandes conjuntos
de instruções, dúzias de modos de
endereçamento e várias instruções
das linguagens de alto nível
implementadas no hardware.
Um número de estudos foi feito durante
anos para determinar as características
e padrões de execução das instruções de
máquina geradas a partir de programas
das linguagens de alto nível. Os
resultados desses estudos inspiraram
alguns pesquisadores a procurar por
uma abordagem diferente: mais
precisamente, tornar a arquitetura que
suporta linguagens de alto nível mais
simples, em vez de mais complexa.
Operações
Instruções de atribuição predominam, sugerindo
que a simples movimentação de dados é de alta
importância. Há também uma preponderância de
instruções condicionais (IF, LOOP). Essas instruções
são implementadas na linguagem de máquina com
algum tipo de instruções de comparação e desvio.
Isso sugere que o mecanismo de controle
sequencial do conjunto de instruções é importante.
Operandos
O estudo de Patterson e Sequin, que já foi
referenciado (PATTERSON e SEQUIN, 1982 ), analisou
também a frequência dinâmica de ocorrência de
classes de variáveis. Os resultados, consistentes
entre programas C e Pascal, mostram que a maioria
das referências é de variáveis escalares simples.
Além disso, mais de 80% de escalares eram variáveis
locais (para o procedimento). As referências para
vetores/estruturas requerem uma referência prévia para
o seu índice ou ponteiro, o qual é novamente um escalar
local. Assim, existe uma predominância de referências
para escalares, e estas são altamente localizadas.
O estudo de Patterson analisou o comportamento
dinâmico dos programas de linguagens de programação
de alto nível, independentemente da arquitetura
subjacente; e sugere que o principal candidato para
otimização é o mecanismo para armazenar e acessar
variáveis locais escalares.
Chamadas de procedimento
O estudo de Tanenbaum
(1978) concluiu que para 98%
de procedimentos chamados
dinamicamente foram
passados menos do que seis
argumentos e que 92% deles
usaram menos do que seis
variáveis locais escalares.
O mesmo grupo de Berkeley
analisou também o padrão de
chamadas e retornos de
procedimentos em programas
de alto nível. Eles concluíram
que é raro haver uma grande
sequência ininterrupta de
chamadas de procedimento
seguida pela correspondente
sequência de retornos.
Eles concluíram que um programa
permanece confinado a uma janela
relativamente estreita de
profundidade de chamadas de
procedimentos.
Grande banco de registradores versus cache
O arquivo de registradores,
organizado em janelas, age como
um pequeno buffer para guardar
um subconjunto de variáveis que
têm mais probabilidade de ser
bastante usadas desse ponto de
vista, o arquivo de registradores
age como uma memória cache,
embora uma memória muito mais
rápida
A cache guarda uma seleção de
variáveis escalares recentemente
usadas e pode fazer uso mais eficiente
do espaço, porque ela reage
dinamicamente a situações. Além
disso, ela geralmente trata todas as
referências de memória da mesma
forma, incluindo instruções e outros
tipos de dados
Um banco de registradores pode fazer
uso ineficiente de espaço a cache
sofre de outro tipo de ineficiência: os
dados são lidos da cache em blocos.
Enquanto o banco de registradores
contém apenas as variáveis em uso, a
cache lê um bloco de dados do qual
uma parte menor ou até maior não
será usada.
Existe uma característica pela qual a
abordagem de registrador é
claramente superior e que sugere que
um sistema baseado em cache será
sensivelmente mais lento. Essa
distinção aparece na quantidade de
overhead de endereçamento
experienciada pelas duas abordagens.
Uso de um banco
grande de
registradores
A razão pela qual o
armazenamento em
registradores é indicado é que
esse é o dispositivo de
armazenamento mais rápido
disponível, mais rápido que a
memória principal e que a cache
é necessária uma estratégia que
irá permitir que operandos
acessados mais frequentemente
sejam guardados em
registradores, minimizando
operações registrador-memória
Duas abordagens básicas são
possíveis, uma baseada em
software e outra baseada em
hardware. A abordagem em
software depende do compilador
para maximizar o uso de
registradores. A abordagem de
hardware é simplesmente usar
mais registradores para que mais
variáveis possam ser guardadas
em registradores por mais tempo.