Zusammenfassung der Ressource
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.