Académique Documents
Professionnel Documents
Culture Documents
Centro de Tecnologia
Departamento de Informtica
32 bits
Variveis globais e ponteiros
R8..R15
Parmetros de entrada
R16..R23
Variveis locais
R24..R31
Parmetros de sada
Por este formato, facilmente podemos concluir que os registradores de variveis globais
podem ser os mesmos para todos os procedimentos, assim, no h necessidade de se ter
fisicamente um conjunto para cada.
ProcB
Globais
Entrada
Locais
Sada
ProcC
Globais
Entrada
Locais
Sada
ProcD
Globais
Entrada
Locais
Sada
modo de endereamento e, sabemos que na arquitetura CISC, isto pode ser muito
complexo. A cache realmente to rpida quanto um registrador, porm, o acesso a ela
demasiadamente lento.
1.6. Acesso memria
impossvel acessar a memria em um nico ciclo. Neste caso a arquitetura RISC tem que
abrir mo da regra bsica e aceitar pelo menos duas instrues maiores: leitura e escrita na
memria.
Instrues comuns continuam tendo apenas registradores como operandos, o que limita os
modos de endereamento, excluindo por exemplo o direto, o indexado e o indireto.
Assim, apenas duas instrues estabelecem a comunicao da CPU com a memria, ainda
assim, devem utilizar registradores especficos.
H que se analisar tambm a questo de instrues como as necessrias para trabalhar com
memria virtual, multiprocessamento e assim por diante. Talvez estas tenham sido o grande
problema de se manter a ideologia da arquitetura RISC proposta, ento o conjunto foi
incrementado com novas instrues para executar tais tarefas.
1.7. Pipelining
Pensemos no seguinte exemplo: um homem sozinho assenta os azulejos de uma cozinha.
Ele precisa buscar cada pea na pilha, acomodar a massa, colocar o ladrilho. Se ele utilizar
os servios de um ajudante, pode eliminar a tarefa de buscar os azulejos e se concentrar nop
assentamento. Simples, duas pessoas trabalhando termina o servio mais rpido.
A tcnica do pipelining muito semelhante ao exemplo acima e tambm uma linha de
montagem de carros. Cada funcionrio faz sua tarefa e no final o carro est pronto mais
rpido que se cada pessoa montasse um deles.
Uma CPU pipelined deve permitir a execuo total da instruo por estgios, por exemplo,
busca da instruo na memria; execuo da instruo e referncias memria (quando
houver). Se utilizando esta tcnica uma instruo for iniciada a cada ciclo, mesmo que ela
demore mais de uma para ser finalizada, em mdia a regra estaria cumprida. Em cinco
ciclos, cinco instrues foram iniciadas.
Busca da instruo
Execuo da instruo
Referncia a memria
1
A
2
B
A
3
C
B
4
D
C
B
5
E
D
Busca da instruo
Execuo da instruo
Referncia a memria
1
A
2
B
A
3
C
B
4
NOP
NOP
5
D
C
Para amenizar este tipo de problema, e muitas vezes realmente solucion-lo, o compilador
deve ser bom o suficiente para garantir que a prxima instruo, no vai utilizar o dado que
est sendo trazido da memria. Isto pode ser feito com uma instruo que no seja a que
esteja na seqncia escrita pelo programador. O compilador deve organizar a execuo das
instrues visando o resultado final, tapando os "buracos" que surgirem por execuo de
instrues de mais de um ciclo, com "coisas teis" ao nves de NOPS's.
Outras instrues alm da que acessam a memria podem atrapalhar o processamento. Um
JUMP condicional, onde o compilador no pode prever o resultado, obriga algumas vezes o
esvaziamento do pipeline para executar o desvio.
Nestes casos as tcnicas utilizadas se chamam, repectivamente, carga atrasada e desvio
atrasado, ambas resolvidas pelo compilador.
1.8. Ausncia do microcdigo
As instrues geradas por um compilador para uma mquina RISC, executam diretamente
no hardware. A eliminao do nvel de interpretao, o fato que influencia diretamente na
velocidade do computador.
Um programa compilado para CISC tem menos instrues assembly que para um RISC, o
que vantajoso na economia de memria, porm, no na velocidade de execuo.
1.9. Formato das instrues
Como as instrues so decodificadas pelo hardware a necessidade de se criar um formato
fixo para elas se torna claro. Cada bit que forma uma instruo entra diretamente no
decodificar ou at mesmo em outras partes do hardware.
opcode
c destino fonte
offset
Modos de endereamento
1.10.1.
Modo imediato (i = 1)
Para instrues com um operando que faz parte da instruo, o segundo operando uma
constante descrita no offset.
1.10.2.
Modo direto
Para operandos em registrador (i = 0), o primeiro operando seria o contedo do registrador
fonte e, o segundo, endereado pelos bits menos significativos do offset, consequentemente,
o resultado armazenado no registrador destino.
1.10.3.
Modo indexado
Para instrues de leitura e escrita na memria, o endereo seria composto pelo offset
somado ao registrador fonte, criando o modo indexado.
1.10.4.
Modo indireto por registrador
O decodificador de instrues quando encontra o offset igual a zero, traduz o endereo
como indireto por registrador, pois, o endereo do operando seria o contido no registrador
fonte.
1.10.5.
Outros modos
O compilador pode criar outros tipos de modos, traduzindo-os para os bsicos, por
exemplo, no projeto RISCII, criou-se um JUMP condicional relativo ao ponteiro de
instrues ou contador de programa (IP ou PC), concatenando os trs campos de baixa
ordema para formar um offset de 19 bits com sinal, podendo assim, se deslocar para cima
ou para baixo.
1.10.6.
Concluso
O crescimento do nmero de modos de endereamento em uma mquina, implica na perda
de velocidade e tambm no aumento da complexidade. Porm, apesar do nome, uma
mquina RISC poderia ter muitas instrues, contanto que elas executassem em um nico
ciclo de via de dados e tivessem o formato fixo. O comprometimento nesse caso, seria o de
construir uma unidade de decodificao bastante complexa, j que ele cresceria
exponencialmente com o nmero de instrues.
2. Compiladores
2.1. Compiladores x hardware
Todo esse estudo conduz para um hardware mais simples quanto possvel, no necessrio
muito esforo para concluir que a complexidade do compilador cresce proporcionalmente
simplicidade do conjunto de instrues, que no RISC esta diretamente ligado ao hardware.
Instruo em alto nvel
compilador
Cdigo de mquina
Quando chega-se justamente ao ponto mais controverso no debate entre CISC x RISC, o
desenho do compilador.
Os defensores do CISC alegam que a distncia semntica conduz a ineficincia de
execuo, programas excessivamente grandes e compiladores complexos e argumentam
que a disponibilidade de instrues de alto nvel e a habilidade de especificar mltiplos
....
....
loop aqui
Este bloco poderia facilmente ser traduzido com a utilizao de decrementos, comparao e
desvio condicional, porm, nota-se aqui que a arquitetura CISC no economiza instrues.
Fica ento a pergunta: qual a arquitetura que melhora o desenho do compilador? Sabendose que este compilador deve ser um compilador otimizador, ir produzir cdigos de
execuo mais rpidos. Uma vez que as instrues devem ocupar um ciclo em mdia, o
compilador deve reorganizar a seqncia das instrues, de forma a tapar os "buracos"
gerados pelas de maior tempo.
2.2. Otimizao dos compiladores
Um programa escrito em linguagem de alto nvel, no explicita os registradores que sero
utilizados, ao invs disso, faz referncias simblicas aos valores atravs das variveis
criadas. Alm disso, no explicita se o valor associado varivel ser guardado num
registrador ou na memria. Como sabe-se que os registradores so mais rpidos que a
memria, desejvel que sejam largamente utilizados.
Cada varivel passvel de ser guardada em um registrador, recebe um tratamento especial.
O compilador pode criar um nmero ilimitado "registradores virtuais" para armazen-las e,
a partir da, compartilhar o registrador real de acordo com alguma tcnica especfica. Claro,
isto feito dentro da limitao da CPU e muitas variveis vo obrigatoriamente para a
memria.
Os compiladores mantm esta filosofia de forma transparente para o programador, mas
alguns, como o caso da linguagem C, oferecem a possibilidade do programador decidir
quais variveis devem, sempre que possvel, serem armazenadas em registradores, para
tanto, ao declarar uma varivel, ao invs de escrever: int soma; escreve-se: register
int soma; obrigando ento, o compilador a priorizar os registradores para aquela varivel.
As arquiteturas RISC utilizam, freqentemente, a tcnica dos grafos coloridos para
otimizar o uso de registradores pelas variveis. Est tcnica no discutida nesta
publicao.
O Pentium, segundo a Intel, utiliza tecnologia CRISC, acoplamento das duas tcnicas. Na
verdade algumas mquinas RISC utilizam poucas de suas tcnicas bsicas, ao mesmo
tempo que implementam conceitos tpicos dos projetos CISC; entretanto, adotam o jargo
RISC por questo de marketing.
Um ambiente comercial caracterizado por processamento transacional, com muita
manipulao de cadeias e inteiros alm de alto fluxo de entrada/sada. J o cientfico se
caracteriza por grande nmero de instrues de ponto flutuante. A concluso lgica que as
mquinas dos dois tipos tem diferentes concepes para diferentes utilizaes.
3.3. Oito diferenas crticas
1
2
3
4
5
6
7
8
4. Exerccios Resolvidos
i.
ii.
Qual o nmero mximo de instrues que um processador deve ter para ser
considerado RISC?
instruo seja executada em um ciclo da via de dados. O nico problema real que a
complexidade do bloco decodificador, OP, cresce exponencialmente com o nmero de
instrues e assim consome proporcionalmente crescentes reas da pastilha.
iii.
FILOSOFIA DO PROJETO RISC: Deixar tanto trabalho quanto for possvel a cargo do
compilador.
De certa forma, o trabalho para se alcanar os objetivos dos projetistas ao criar arquitetura
RISC, simplificar o conjunto de instrues e otimizar o funcionamento do processador,
recaiu sobre o compilador. Pelo fato de no mais se utilizar microcdigo para fazer a
interpretao da linguagem de mquina o trabalho do compilador se tornou um pouco mais
complicado. Agora, alm de gerar microcdigo para programas de usurios, ele deve
administrar toda a seqncia de pipeline do programa, e garantir seu funcionamento
otimizado, de forma a no permitir ciclos vazios, alm de possibilitar que operaes com
dados da memria possam ser feitas em mdia em um ciclo de via de dados. Logo, a tarefa
executada pelo microcdigo da arquitetura CISC passa a ser do compilador.
A tecnologia do compilador um fator crtico do projeto RISC. Compiladores otimizados
devem transportar toda a complexidade do hardware para a fase de compilao.
Para manter a simplicidade do hardware, o compilador projetado para lidar com
caractersticas intrincadas da arquitetura RISC, como cargas, armazenamento e desvios
atrasados, que aumentam consideravelmente a complexidade do compilador.
O compilador deve fazer uso intensivo de registradores para reduzir o trfego de memria,
para evitar instrues que demoram mais do que um ciclo da via de dados para serem
completados. Consequentemente, essencial que o compilador RISC seja capaz de otimizar
da melhor maneira possvel o uso de registradores, levando em considerao que as
instrues comuns no podem utilizar operandos de memria. Para viabilizar esta
otimizao so utilizados algoritmos de alocao de registradores sofisticados. Apesar
destes algoritmos melhorarem o cdigo colocando mais variveis em um nmero limitado
de registradores, eles tambm aumentam a complexidade do compilador.
Alm disso, o compilador RISC deve, sempre, buscar produzir um cdigo correto e
eficiente, tentando contornar os problemas acarretados pelos saltos atrasados, por exemplo.
A partir destes fatos, constata-se que a arquitetura RISC tambm possui alguns problemas,
assim como a arquitetura CISC, guardadas as devidas propores.
iv.
a)CISC
A maioria dos procedimentos recebem parmetros fornecidos pelo procedimento que
chama. Nas mquinas CISC, estes parmetros so empilhados um de cada vez, pelo
processo que chama, no incio da execuo da instruo CALL. O procedimento chamado,
busca na pilha os parmetros esperados. Este processo se baseia 100% na comunicao com
a memria.
b)RISC
O objetivo de toda mquina RISC executar uma instruo por ciclo, em mdia. Uma vez
que LOAD e STORE requerem, normalmente, dois ciclos, quanto menos instrues deste
tipo forem utilizados, maior ser a eficincia da mquina.
Grande parte do trfego de memria total est relacionada a chamadas de procedimentos.
Parmetros tm que ser passados, registradores tm que ser salvos, e o endereo de retorno
tem que ser empilhado na chamada e desempilhado no retorno. Todas estas aes geram
alto trfego de memria.
Uma forma de eliminar parte deste trfego utilizar um mtodo chamado janelas
sobrepostas de registradores, adotado por algumas mquinas RISC. Quando janelas
sobrepostas so utilizadas, a CPU contm um grande nmero de registradores, mas em cada
momento somente um subconjunto deles, 32 registradores de 32 bits, visvel para um
programa. Este conjunto dividido em quatro grupos distintos com 8 registradores cada.
O primeiro grupo (R0 a R7) guarda variveis globais e ponteiros; esses so utilizados
por todos os procedimentos ao longo do programa, sendo da responsabilidade decidir o
que colocar em cada registrador.
O segundo grupo, R8 a R15, guarda os parmetros de entrada; evita o uso de pilha, que
utilizada somente se o nmero de parmetros exceder 8, neste caso, o ltimo
registrador contm o endereo da pilha onde se encontra o restante dos parmetros. No
colocar os parmetros na pilha elimina STOREs quando eles so passados e elimina
LOADs quando eles so acessados pelo procedimento chamado.
O terceiro grupo , R16 a R23, esto disponveis para as variveis locais, o excedente
tambm vai para a pilha.
O quarto grupo de registradores, R24 a R31, utilizado para passar os parmetros para
os procedimentos chamados, sendo a pilha utilizada somente na falta de registradores
para os parmetros.
CACHE
VARIVEIS LOCAIS
VARIVEIS GLOBAIS
Todas so armazenadas
ENDEREAMENTO DE
MEMRIA
TRANSFERNCIA
vi.
Uma mquina RISC pode ter cache. Isto depender da aplicao para o qual a mquina
projetada. A cache oferece muitas caractersticas que podem ser benficas para um projeto
RISC, entre elas, a possibilidade de armazenamento de trechos de cdigo, que impossvel
para os registradores. Alm disso, os on-chip caches, que quando cronometrados se
apresentam to rpidos quanto o processador.
Conclui-se que a deciso correta, quanto a implementao ou no da memria cache, deve
ser baseada numa ponderao sobre todas caractersticas debatidas no item anterior.
vii.
a)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
1 1 1 0 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 1
rd
rs1
op
sisconst1a
Verificando o primeiro campo da instruo (da esquerda para direita), poderia-se dizer que
se trata de uma instruo para load ou store. Sendo o bit 13 igual a 1, sabemos que se trata
de uma instruo de store, entretanto, como o campo op (bits 19 a 24) armazena uma
seqncia de valores que no pertence a tabela de cdigos de operao de load e store,
descartada esta possibilidade. O valor do primeiro campo tambm poderia indicar que a
instruo seja uma instruo geral das mquinas SPARC, porm, o campo dos bits 19 a 24
tambm no fazem parte da tabela de instrues, podemos concluir que se trata de uma
instruo invlida.
b)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 1 0
Os dois primeiros bits da instruo com valores 0 e 1 indicam uma instruo call. No
existem demais exigncias para comprovao da instruo, os demais bits (0 a 29) formam
o endereo de desvio e, desta forma, esto disponveis para o contador do programa.
c)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1
Devido aos valores da seqncia de bits 22 a 24 no corresponderem a nenhum valor da
tabela de instrues de desvio condicional ou instrues sethi, descartou-se a possibilidade
de serem este tipo de instruo e, considerando a seqncia dos bits do campo op (22 a 24)
concluiu-se que se trata de uma instruo no implementada com cdigo de campo
correspondente a instrues ilegais.
d)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 0
A instruo acima corresponde a instruo de subtrao, caracterizado pelo valor 10 dos
primeiros campos e pela seqncia de bits do campo op (22 a 24) que correspondem a
instruo subcc. O campo rd (25 a 29) corresponde ao campo de registrador de destino, no
caso o %R19, o campo rs corresponde ao registrador origem (14 a 18), um segundo
operando origem pode ser um registrador (0 a 4) ou um valor constante (0 a 12). Na
instruo acima, trata-se de um valor constante no campo siconst (1FOA h).
e)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
0 1 1 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0
Esta outra instruo call, foi analisada da mesma forma que a instruo da letra b.
ix.
a)
.text
start: set delta, %r1
ld [%r1], %r2
set z, %r1
ld [%r1], %r3
set y, %r1
ld[%r1], %r4
cmp %r2, 0
bg cond
mov %r0, %r4
cond: mov %r0, %r3
b)
conta=0;
while (conta <0){
y=conta;
conta++;
}
.text
start: set conta, %r0
ld [%r1], %r4
set y, %r0
ld [%r1], %r2
test:
5. Bibliografia
TANENBAUM, A., Organizao e Arquitetura de computadores, Prentice Hall do Brasil,
1990
STALLINGS, W., Computer Organization and Architeture, Prentice Hall, 1996
5.1. Internet
http://minerva.ufpel.tche.br/~machado/risccisc/pagina.html
http://www.din.uem.br/sica/apostilas
http://www.sunworld.com/sunworldonline/swol-09-1999/swol-09-insidesolaris.html