Arquitectura do conjunto de...

30
Arquitectura do conjunto de instruções João Canas Ferreira Outubro de 2006 Contém figuras de “Computer Architecture: A Quantitative Approach”, J. Hennessey & D. Patterson, 3ª. ed., MKP 2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 1/31 Assuntos 1 Aspectos gerais 2 Operandos Modos de endereçamento Tipos de dados 3 Operações 4 Controlo de fluxo 5 Codificação de instruções 6 Geração de código 2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 2/31

Transcript of Arquitectura do conjunto de...

Arquitectura do conjunto de instruções

João Canas Ferreira

Outubro de 2006

Contém figuras de “Computer Architecture: A Quantitative Approach”, J. Hennessey & D. Patterson, 3ª. ed., MKP

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 1/31

Assuntos

1 Aspectos gerais

2 OperandosModos de endereçamentoTipos de dados

3 Operações

4 Controlo de fluxo

5 Codificação de instruções

6 Geração de código

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 2/31

Aspectos gerais

O conjunto de instruções

Arquitectura do conjunto de instruções: a parte de um computador queo programador/compilador manipula e controla. Inclui:

as instruções e seus modos de endereçamento;a arquitectura de registos (homogénea ou não);atendimento de interrupções;modelo de interacção com o exterior (E/S).

A organização do conjunto de instruções impõe uma “ordemconceptual” (modelo).

Adaptação à área de utilização (DSP, multimédia: MMX, SSE, . . . ).

A ACI constitui o “contrato” entre o projectista e o utilizador.

A ACI tem frequentemente uma evolução histórica. Ver:Blaauw, Gerrit A.; Brooks, Jr., Frederick P., "Computer Architecture: Concepts and

Evolution", Addison Wesley, 1997 (Cota: 004.2/BLAg/COM)

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 3/31

Notas:

3.1. Actualmente, os conjuntos de instruções dos três sectores (desktop, servidor eembutido) são basicamente semelhantes. Os processadores para processamentodigital de sinal (PDS) são os que apresentam maiores diferenças, quer devido àárea de aplicação, quer devido a uma “cultura” própria dessa área, que aindarecorre frequentemente à programação em assembly. À medida que também aí osprogramas ficarem mais complexos e o recurso a compiladores for mais alargado,assistir-se-á provavelmente a uma homogeneização dos conjuntos de instruções.

3.2. Os conjuntos de instruções evoluem historicamente: a compatibilidade de códigobinário é simultaneamente uma benção (serve para manter a base de clientes e deaplicações) e uma maldição (impede o aproveitamento total dos avançostecnológicos ou arquitecturais).

3

Aspectos gerais

Critérios de organização

Os seguintes aspectos são úteis na análise da arquitectura de um conjuntode instruções:

Operandosorigem dos operandosmodos de endereçamentotipos de operandos

Tipos de operações

Controlo de fluxosaltos condicionaissaltos incondicionais incl. invocação de subrotinas

Codificação das instruções

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 4/31

Notas:

4.1. A flexibilidade no acesso aos operandos é de grande importância para a geraçãode código de boa qualidade. Como se verá mais à frente, isso não implica anecessidade de suportar muitas variantes directamente.

4.2. O controlo de fluxo é um dos aspectos mais delicados do conjunto de instruções.Este tipo de instruções é muito frequente (cerca de 15%-20% das instruçõesexecutadas) e o seu tratamento é um dos pontos-chave da arquitectura de umCPU.

4

Operandos Modos de endereçamento

Classificação dos conjuntos de instruções

A maneira de armazenar dados internos é o critério mais básico dediferenciação.

pilha (stack architecture)

acumulador (accumulator architecture)

conjunto de registos de uso genérico

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 5/31

Notas:

5.1. As arquitecturas de conjuntos de instruções (ACI) com mais registos que umacumulador dividem-se em dois grandes tipos: registos de uso específico (paraendereços, pilha, etc.) ou de uso genérico, sendo este último usado em todas asarquitecturas comuns pós-1980. (Os processadores para PDS são uma dasexcepções.)

5.2. O sucesso dos registos de uso genérico deve-se a dois aspectos:

(i) registos são mais rápidos que memória;(ii) registos podem ser eficientemente usados pelo compilador (para mapear

variáveis e reduzir tráfego para memória principal).

5.3. Para os algoritmos actuais de selecção de registos terem bons resultados, énecessário que exista um número razoável de registos genéricos livres (pelomenos 16).

5

Operandos Modos de endereçamento

Classificação segundo a origem dos operandos

Mem. Max. ops. Arquitectura Exemplos

0 3 reg-reg Alpha, MIPS, SPARC1 2 reg-mem IBM 360/370, Intel 80x862 2 mem-mem VAX3 3 mem-mem VAX

Tipo Vantagens Desvantagens

reg-reg Codificação simples, comprimento único.Geração de código simplificada. Duraçãosimilar.

Número de instruções elevado. Programas mais compri-dos.

reg-mem Acesso a dados sem “load” em separado.Tendem a ter boa densidade de codifica-ção.

Operandos não são equivalentes. Duração varia com alocalização dos operandos. Pode restringir o número deregistos codificáveis.

mem-mem Programas compactos. Não ocupa registoscom resultados temporários.

Comprimento de instruções muito variável. Complexidadede instruções muito variável. Acesso a memória é crítico.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 6/31

Notas:

6.1. As duas principais características que dividem arquitecturas com registos de usogenérico (RUG) são:

1. número de operandos: 2 vs. 3;2. quanto operandos podem residir em memória (de 0 a 3).

As combinações apresentadas na tabela cobrem quase todas as alternativaspráticas.

6.2. As vantagens e desvantagens referidas na tabela não são absolutas: o seu impactoreal depende do compilador usado e da estratégia de implementação em silício.

6.3. A grande maioria das arquitecturas actuais favorece o modelo reg-reg.

6.4. Arquitecturas mem-mem não são usadas actualmente.

6

Operandos Modos de endereçamento

Modos de endereçamento

Modo Exemplo Significado

registo add R4, R3 R[4]:=R[4]+R[3]imediato add R4,#3 R[4]+3deslocamento add R4,100(R1) R[R4]:=R[4]+M[100+R[1]]registo indirecto add R4,(R1) R[4]:=R[4]+M[R[1]]indexado add R3,(R1+R2) R[3]:=R[3]+M[R[1]+R[2]]directo add R1,(1001) R[1]:=R[1]+M[1001]mem indirecto add R1,@(R3) R[1]:=R[1]+M[M[R[3]]]auto-incremento add R1,(R2)+ R[1]:=R[1]+M[R[2]]

R[2]:=R[2]+dauto-decremento add R1,-(R2) R[2]:=R[2]-d

R[1]:=R[1]+M[R[2]]escalado add R1,200(R2)[R3] R[1]:=R[1]+M[200+R[2]+R[3]*d]

å R0, R1, etc. são registos.å M[ ] representa a memória externa.

å R[ ] representa o banco de registos internos; R[1] é R1, etc.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 7/31

Notas:

7.1. Por convenção, os modos de endereçamento incluem a especificação de todos osoperandos, incluindo os residentes em registos e os valores constantes (tambémdesignados neste contexto por valores “imediatos”).

7.2. O factor de escala d indicado na última linha da tabela é geralmente especificadoatravés do código da operação (opcode). Os valores mais típicos sãod = 1, 2, 4, 8.

7.3. As arquitecturas RISC usam frequentemente o modo de deslocamento para simularo modo “registo indirecto” (com o deslocamento a zero) e o modo deendereçamento directo (com zero no registo de base).

7.4. Os modos de endereçamento podem permitir uma efectiva redução do número deinstruções, mas também podem aumentar significativamente a complexidade daimplementação, o que leva geralmente o CPI a baixar.

7

Operandos Modos de endereçamento

Frequência de modos de endereçamento

Medidas efectuadas para a arquitectura VAX.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 8/31

Notas:

8.1. Os valores empíricos indicados nesta figura (como nas restantes) são meramenteindicativos (embora se espere que sejam representativos). Uma avaliaçãodetalhada requereria muito mais dados.

8.2. O modo de acesso “registo” não está incluído na tabela (representa cerca de 50%das referências totais). Os 50% relativos a referências a memória e valoresimediatos repartem-se conforme indicado na figura.

8.3. Os programa foram avaliados no computador VAX porque este suporta todos osmodos de endereçamento referidos na tabela anterior.

8

Operandos Modos de endereçamento

Gama de deslocamentos

Processador Alpha: CINT2000 (inteiros) e CFP2000 (vírgula flutuante) são subconjuntos de

SPEC CPU2000.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 9/31

Notas:

9.1. A escolha da gama de endereçamentos é importante porque a dimensão do campode deslocamento afecta directamente o tamanho da instrução codificada.

9.2. O gráfico não inclui o bit de sinal. A maior parte dos deslocamentos é positiva,mas a maior parte dos deslocamentos grandes (14 bits ou mais) é negativa. Osinal do deslocamento é fortemente influenciado pela organização das estruturasde dados em memória.

9.3. O computador Alpha apenas suporta 16 bits de deslocamento.

9.4. Como em todos as outras medidas, o compilador foi configurado para o melhornível possível de geração de código.

9

Operandos Modos de endereçamento

Utilização de operandos imediatos

Programas e processador são os indicados anteriormente.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 10/31

Notas:

10.1. Os valores imediatos são usados em operações aritméticas, comparações(principalmente para saltos condicionais) e em transferências (carregar umregisto com um valor constante). Os valores imediatos pode provir de constantesmencionadas no código (geralmente de valor pequeno) e de endereços(geralmente grandes).

10.2. Cerca de um quarto das transferências de dados e das operações da ALU usamoperandos imediatos.

10.3. “Loads” com valores imediatos não são “loads” num sentido estrito porque nãoacedem à memória de dados.

10

Operandos Modos de endereçamento

Distribuição de valores imediatos

Programas e processador são os indicados anteriormente. O processador Alpha só suporta

valores imediatos até 16 bits.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 11/31

Notas:

11.1. Como acontece com os valores dos deslocamentos, o valor das constantes afectadirectamente o tamanho das instruções.

11.2. Valores imediatos pequenos são os mais frequentes.

11.3. Valores maiores ocorrem quando endereços de memória são especificadosdirectamente.

11.4. Na arquitectura Alpha, os valores imediatos estão restringidos a 16 bits.Constantes maiores são construídas à custa de duas instruções.

11

Operandos Modos de endereçamento

PDS: modos de endereçamento

Modos de endereçamento especiais:

circular Também designado por endereçamento modular. Endereços sãoincrementados até atingirem um valor máximo especificado,sendo depois repostos os valores iniciais (gestão de bufferscirculares).

bit reverse Modo de endereçamento usado na FFT. Exemplo para 8 itens:

0 (0002)→ 0 (0002)1 (0012)→ 4 (1002)2 (0102)→ 2 (0102)3 (0112)→ 6 (1102)4 (1002)→ 1 (0012)5 (1012)→ 5 (1012)6 (1102)→ 3 (0112)7 (1112)→ 7 (1112)

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 12/31

Notas:

12.1. Processamento digital de sinal é caracterizado por um núcleo relativamentepequeno de tarefas num ambiente relativamente uniforme: processamentorepetitivo (e restringido temporalmente) de sequências de números. Por isso, éfrequente a necessidade de gerir buffers que se vão enchendo ou esvaziando. Omodo de endereçamento circular associa a cada registo de endereçamento(registos especiais para controlar o acesso a memória) um par de outros registosque contém os limites do buffer.

12.2. A transformada rápida de Fourier (FFT) discreta, um algoritmo muito usado,produz o vector de resultados com os elementos dispostos de uma forma diferentedo vector de entrada. Um modo especial de endereçamento permite percorrer oselementos do resultado pela ordem desejada.

12

Operandos Modos de endereçamento

PDS: frequência de modos de utilização

Modo de endereçamento Símbolo Freq. (%)imediato #num 30.02deslocamento ARx(num) 10.82registo indirecto *ARx 17.42directo num 11.99auto-incremento, pré-incremento *+ARx 0auto-incremento, pós-incremento *ARx+ 18.84auto-incremento, pré-incremento 16b imediato *+ARx(num) 0.77auto-incremento, pré-incremento, circular *+ARx% 0.08auto-incremento, pós-incremento 16b imediato, circular *ARx+(num)% 0auto-incremento, pós-incremento com AR0 *ARx+0 1.54auto-incremento, pós-incremento com AR0, circular *ARx+0% 2.15auto-incremento, pós-incremento com AR0, bit reverse *ARx+0B 0autodecremento, pós-decremento *ARx- 6.08autodecremento, pós-decremento, circular *ARx-% 0.04autodecremento, pós-decremento com AR0 *ARx-0 0.16autodecremento, pós-decremento com AR0, circular *ARx- 0% 0.08autodecremento, pós-decremento com AR0, bit reverse *ARx- 0B 0

Processador: TI TMS320C54x; 54 rotinas em assembly; ver: http://focus.ti.com/docs/toolsw/folders/print/sprc099.html

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 13/31

Notas:

13.1. Os compiladores não “sabem” aproveitar os modos especiais de endereçamento,pelo que é frequente o recurso a bibliotecas de funções escritas em linguagemassembly. Mesmo essas bibliotecas não usam os modos de endereçamento maisincomuns, como mostram os resultados apresentados.

13.2. À medida que as aplicações de PDS ficarem mais complexas, a dependência decompiladores aumentará e a utilização de modos de endereçamento especiaisdiminuirá.

13.3. Embora as medidas tenham sido feitas apenas para um biblioteca, não deixam detornar visíveis os efeitos referidos.

13

Operandos Modos de endereçamento

Modos de endereçamento: sumário

Conclusões quantitativas:

Novas arquitecturas suportam os seguintes modos de endereçamento:deslocamento, imediato, indirecto via registo. [75%-99%]

Tamanho de deslocamento pelo menos 12–16 bits. [75%–99%]

Valor imediato entre 8–16 bits. [50%–80%]

å Mesmo usando rotinas assembly produzidas manualmente, os modos deendereçamento mais exóticos de processadores PDS são pouco usados.

å Os modos de endereçamento dos conjuntos de instruções para PCs devemcorresponder às necessidades/capacidades dos compiladores.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 14/31

Notas:

14.1. Os resultados apresentados “apenas” justificam a plausibilidade destasrecomendações. É necessário muito trabalho adicional para as tornarindependentes dos sistemas particulares usados na avaliação.

14.2. A transposição destas conclusões para sistemas de 64 bits pode não ser directa.Exemplo concreto: as gamas de deslocamento permanecerão iguais em espaços deendereçamento muito maiores? A disponibilidade de espaços de endereçamentomaiores não levará a outro tipo de organização das estruturas de dados emmemória?

14

Operandos Tipos de dados

Operandos: tipos e tamanhos

Tipo:codificado no opcodecodificado nos operandos: tagged data

Operandos comuns:caracteres 8 bitshalf word 16 bitsword 32 bitsvírgula flutuante, precisão simples 1 palavravírgula flutuante, precisão dupla 2 palavrasRepresentação:inteiros complemento para 2caracteres ASCII ou Unicode 16 bitsvírgula flutuante norma IEEE 754strings cadeias de bytesdecimal BCD empacotado ou desempacotado

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 15/31

Notas:

15.1. Todas as arquitecturas actuais codificam o tipo de dados no código da instrução,i.e., a mesma operação com dois tipos de dados tem códigos diferentes. Porexemplo, a soma de dois números inteiros e a soma de dois números de vírgulaflutuante têm dois códigos diferentes. Mesmo a soma de números inteiros temcódigos diferentes conforme se trata de operandos de 16 ou de 32 bits (porexemplo).A alternativa consiste em ter apenas um código de instrução para cada operação,mas dotar os dados de etiquetas que identificam o respectivo tipo. Oprocessamento de cada instrução dependerá então do tipo de dados específicosdos operandos usados.O seguinte artigo inclui uma discussão das vantagens e desvantagens de etiquetaros dados:E.F. Gehringer & J.L. Keedy, Tagged architecture: How compelling are itsadvantages?, Proceedings of the 12th Annual International Symposium onComputer Architecture, pp. 162–170, 1985.

15.2. Etiquetas de dados foram muito usadas nos anos 80 em computadoresespecializados na execução de Lisp e/ou Scheme. Ver:D.A. Moon, Architecture of the Symbolics 3600, Proceedings of the 12th AnnualInternational Symposium on Computer Architecture, pp. 76–83, 1985.

15

Operandos Tipos de dados

Distribuição do tamanho dos operandos

Resultados para CINT2000 e CFP2000 com microprocessador Alpha.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 16/31

Notas:

16.1. O tipo “double word” inclui números em vírgula flutuante de precisão dupla eendereços, porque se trata de um processador de 64 bits. Num processador de32 bits, a grande maioria dos acessos a dados de 64 bits em programas com dadosinteiros seria antes do tipo “word” .

16.2. Em algumas arquitecturas, os dados em registos podem ser acedidos como bytesou “half words”. Este modo de operação é relativamente infrequente: 12% dereferências a registos no VAX (correspondendo a cerca de 6% das referências adados).

16

Operandos Tipos de dados

PDS: tipos de operandos

vértices: 4 coordenadas em vírgula flutuante, 32 bits cadapixel: 32 bits (RGB+A)vírgula fixa

Ger. Ano Exemplo Dados Acumulador1 1982 TI TMS32010 16 322 1987 Motorola DSP56001 24 563 1995 Motorola DSP56301 24 564 1998 TI TMS3200C6201 16 40

dados operação transferência16 bits 89.3% 89.0% para TMS320C540X32 bits 10.7% 11.0% vírgula fixa

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 17/31

Notas:

17.1. A aritmética de vírgula fixa requer o tratamento explícito de eventuais expoentes(ou factores de escala). Em alguns casos, um expoente pode ser “partilhado” porvários números (blocked floating point).

17.2. Para auxiliar o tratamento desses factores e a conversão de números entrediferentes escalas, os processadores PDS têm frequentemente acumuladores commais bits que os operandos. Dessa forma é possível evitar a acumulação de errosde arredondamento.

17.3. A vantagem da utilização de vírgula fixa está no facto de a complexidade doscircuitos associados ser praticamente igual à dos circuitos de tratamento denúmeros inteiros.

17

Operações

Tipos de operações

Tipo de operador Exemplos

Aritmética e lógica aritmética inteira e operações lógicas: somar,subtrair, multiplicar, negar, and, or

Transferência de dados load-store, instruções move com endereça-mento de memória

Controlo saltos condicionais e incondicionais, invoca-ção de subrotinas e retorno, traps

Sistema chamadas ao sistema operativo, gestão de me-mória virtual

Vírgula flutuante somar, multiplicar, funções transcendentaisDecimal aritmética em BCD, conversão ASCII–BCDStrings mover, comparar, pesquisarGráficos operações sobre pixels e vértices, compres-

são/descompressão

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 18/31

Notas:

18.1. Existem ainda outras classes de operações. Por exemplo. (i) tratamento deinterrupções; (ii) comunicação com periféricos; (iii) operações em modosupervisor: gestão de permissões, de memória virtual e de caches; (iv)sincronização entre processadores.

18.2. As instruções de vírgula flutuante são muitas vezes optativas. Sistemas embutidosusam frequentemente versões sem suporte directo para estas operações. Mesmo aarquitectura MIPS delega as instruções de vírgula flutuante num coprocessador(embora este não seja fisicamente separado do processador principal).

18.3. Na arquitectura IA-32, as instruções de vírgula flutuante seguem um modelodiferente do processador principal (pilha interna). Originalmente, a suaimplementação era feita por um coprocessador separado, o que ainda se reflecteno modelo de utilização actual.

18

Operações

Operações da família IA-32

Posição Instruções 80x86 Nº méd. instr. exec. (%)

1 leitura load 222 salto condicional 203 comparação 164 escrita store 125 add 86 and 67 sub 58 mov. reg–reg 49 call 110 return 1

total 96

10 instruções mais frequentes; média dos cinco programas SPECint92.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 19/31

Notas:

19.1. É natural que as frequências de utilização de instruções variem muito. No caso daarquitectura IA-32, os dez tipos de instruções da tabela representam 96% dasinstruções usadas (não inclui instruções de vírgula flutuante).

19.2. De acordo com o princípio geral de favorecer o desempenho das instruções maisusadas (que também são as mais simples), as instruções da tabela são aquelaspara as quais o projectista deve tentar garantir o melhor desempenho.

19

Operações

Operações para PDS

Categoria HP-PA MAX2 Pentium MMX PowerPC AltiVec SPARC VIS

soma/subtracção 4H 8B, 4H, 2W 16B, 8H, 4W 4H,2Wadi./sub. saturada 4H 8B, 4H 16B, 8H, 4Wmultiplicação 4H 16B, 8Hcomparação 8B, 4H, 2W 16B, 8H, 4W 4H, 2Wdesl. esq./dir. 4H 4H, 2W 16B, 8H, 4Wdesl. aritm. dir. 4H 16B, 8H, 4Wmultiplicar+somar 8Hdesloc.+somar (sat.) 4Hand/or/xor 8B, 4H, 2W 8B, 4H, 2W 16B, 8H, 4W 8B, 4H, 2Wdif. absoluta 16B, 8H, 4W 8Bmax/min 16B, 8H, 4Wpermutar/shuffle 4H 16B, 8H, 4W

B=byte (8 bits), H=half word (16 bits), W=word (32 bits).

8B significa: 8 operações em paralelo sobre bytes.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 20/31

Notas:

20.1. O processamento de informação multimédia é condicionado pelos limites dapercepção humana, requerendo por isso muito menos que 64 bits pararepresentação. Daí existir a possibilidade de usar os mesmos recursos paraexecutar várias instruções simultaneamente. Por exemplo, é possível fazer 4somas de 16 bits com os recursos de um somador de 64 bits. Este estilo deinstruções pertence à categoria SIMD (single-instruction multiple-data).

20.2. As ACI mais populares foram dotadas de extensões com este tipo de instruções. Atabela mostra alguns exemplos. Todos se baseiam numa ALU de 64 bits excepto oconjunto AltiVec, que se baseia numa ALU de 128 bits.

20.3. Os processadores PDS também fornecem algumas instruções deste tipo(especialmente as correspondentes às três primeiras linhas), mas com algumasvariantes:

• saturação (quando existe overflow, o resultado permanece no máximo valorpossível);

• utilização de acumuladores de maior capacidade e consequente necessidadede fornecer instruções de arredondamento para tamanhos menores;

• instruções de multiplicação-acumulação.

20

Controlo de fluxo

Instruções para controlo de fluxo

Frequência relativa das instruçõs para controlo de fluxo:

Resultados para CINT2000 e CFP2000 com microprocessador Alpha.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 21/31

Notas:

21.1. As instruções de transferência do fluxo de processamento têm modos deendereçamento e um comportamento diferentes das outras instruções. Daí anecessidade de as considerar separadamente.

21.2. Os quatro tipos principais de modificações do fluxo de processamento são:

1. saltos condicionais (branches);2. saltos incondicionais (jumps);3. invocação de subrotinas;4. retorno de subrotinas.

21.3. Existem ainda outras situações em que o fluxo de controlo é modificado:tratamento de interrupções e de excepções internas (traps).

21

Controlo de fluxo

Modos de endereçamento para controlo de fluxo

posição absoluta (valor imediato)

relativo ao program counter: código independente da posição (PIC)retornos e saltos indirectos são feitos via registos (ou endereços emmemória)

instruções case/switchfunções virtuais/métodos OOfunções de ordem superior ou apontadores para funçõesbibliotecas dinâmicas partilhadas (.dll/.so)

Resultados para CINT2000 e CFP2000 com microprocessador Alpha.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 22/31

Notas:

22.1. O endereço de destino de uma transferência de controlo deve ser sempreespecificado. A especificação é geralmente explícita, com excepção do retorno desubrotinas (e do tratamento de interrupções/excepções).

22.2. A maneira mais comum de especificar o endereço de destino é relativamente aovalor do program counter (endereço da instrução actual).

22.3. A especificação de endereçamento relativo permite obter código independente daposição (PIC: position independent code).

22.4. Cerca de 75% dos saltos condicionais relativos da tabela são “para a frente”(deslocamento relativo positivo).

22.5. Para retorno de subrotinas e saltos indirectos, o endereço de destino deve serespecificado pelo conteúdo de um registo ou de uma posição de memória (atravésde um modo de endereçamento).

22.6. Por exemplo, na arquitectura IA-32 o retorno de subrotina vai buscar o endereçode retorno ao topo de uma pilha (mantida em memória central); o endereço dotopo da pilha é mantido num registo reservado para esse efeito (ESP).

22

Controlo de fluxo

Especificação de condições para saltos

Nome Exemplos Tipo de teste Vantagens Desvantagens

Código de condi-ção (CC)

80x86, ARM,PowerPC,SPARC

Verifica bits especiaisdeterminados pela ALU.

Condição é“gratuita”.

Informação de estado extra.Restrições sobre a ordem dasinstruções.

Registo de con-dição

Alpha, MIPS Testa registo arbitrário com o resul-tado de uma operação.

Simples. “Gasta” um registo.

Compara e salta HP-PA, VAX,MIPS

Comparação faz parte do salto. Uma instruçãoem vez deduas.

Impacto negativo sobre pi-peline.

Frequentemente são usados técnicas diferentes para saltos baseados emcomparações inteiras ou com vírgula flutuante.Computadores com compara-e-salta limitam frequentemente o tipo decomparações; comparações complexas usam registos.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 23/31

Notas:

23.1. Compara-e-salta refere-se a instruções de salto condicional com especificação doteste a executar. Geralmente esta comparação são um subconjunto simples dasinstruções de teste. Esta abordagem pode ser usada em conjunto com as outrasduas.

23.2. A utilização de um registo de códigos de condição (flags) pode criardependências entre instruções, quando existe apenas um conjunto de bits para oseu armazenamento.

23.3. Processadores PDS têm frequentemente uma instrução de iteração (repeat), querepete um conjunto de instruções um número fixo de vezes (indicado numregisto). A sua utilização justifica-se por estas aplicações terem frequentementenúcleos de iterações muito pequenos, em que o overhead de controlo de ciclopoderia ser relativamente grande.

23

Controlo de fluxo

Frequência de comparações em saltos relativos

Resultados para CINT2000 e CFP2000 com microprocessador Alpha.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 24/31

Notas:

24.1. Para ajudar a determinar que tipo de testes devem ser combinados com o saltocondicional numa instrução do tipo compara-e-salta é importante determinar afrequência relativa dos testes simples.

24.2. Os resultados da tabela dizem respeito a comparações inteiras e de vírgulaflutuante.

24

Codificação de instruções

Importância da codificação de instruções

A decisão mais importante refere-se à forma de codificar os modos deendereçamento. Depende de:

número de registosnúmero de modos de endereçamentograu de independência entre operações e modos

A codificação procura equilibrar três aspectos diferentes:permitir a especificção do maior número possível de registos e modos deendereçamento;limitar o comprimento médio dos programas (e, portanto, o comprimentomédio das instruções);facilitar o tratamento das instruções na presença de pipelines.

descodificação fácildetecção precoce de dependências

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 25/31

Notas:

25.1. A codificação é directamente responsável pela capacidade de expandir mais oumenos facilmente o conjunto de instruções de uma arquitectura.

25.2. A codificação também afecta directamente o tamanho do programa em memória(memory footprint), o que é bastante importante para os sistemas embutidos.

25

Codificação de instruções

Esquemas básicos de codificação

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 26/31

Notas:

26.1. Especificador de endereço (address specifier): indica qual o modo deendereçamento a usar. É usado em arquitecturas que têm muitos operandos emodos de endereçamento diferentes.

26.2. Numa arquitectura load-store, as instruções de acesso a memória apenas têm umoperando em memória e um número reduzido de modos de endereçamento: estepode ser codificado directamente no código da operação.

26.3. A codificação “variável” beneficia o tamanho dos programas.

26

Codificação de instruções

Redução de tamanho de programas RISC

Em aplicações embedded, a dimensão dos programas é um factor importante→ instruções fixas de 32 bits são um problema. Soluções:

conjuntos de instruções híbridos com instruções de 16 bits (menosoperações, menos operandos, endereços menores, etc.)reduções até 40% (consultar também o apêndice C)

compressão dos programas (com descompressor embutido nomicroprocessador): CodePackreduções entre 35%-40% com diminuição de desempenho de 10%

conjunto de instruções RISC de 16 bits (SuperH da Hitachi)

Codificação variável beneficia o tamanho do código, codificação fixa melhorao desempenho.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 27/31

Notas:

27.1. Nos sistemas embutidos, a memória contribui bastante para o preço final (> 30%)e, eventualmente, para o consumo (utilização de memória estática).

27

Geração de código

Relação entre ACI e compiladores

Quase todos os programas são escritos em linguagens de alto nível.ACI é o alvo para os compiladores;ACI não é o alvo para os programadores.

Hoje em dia é essencialmente impossível separar a tecnologia decompilação da arquitectura e vice-versa.

A qualidade do compilador afecta fortemente o desempenho doprocessador.

Adaptação da ACI às características de linguagens de alto nível.manipulação de pilha, zona global e zona de alocação dinâmica (heap)

Os processadores PDS são um mau exemplo de (não-)cooperação entrearquitectos de hardware e de compiladores.

É muito difícil habilitar o compilador a aproveitar os modos adicionais deendereçamento bem como as instruções especializadas.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 28/31

Notas:

28.1. Praticamente todas as arquitecturas modernas são influenciadas porconsiderações relativas à geração automática de código. Em alguns casos, autilização eficaz do processador sem um compilador/optimizador é praticamenteinviável, dada a necessidade de conhecer a operação detalhada do CPU paraavaliar do impacto da combinação das diferentes operações.

28.2. Os processadores topo-de-gama actuais podem ter simultaneamente mais de umacentena de instruções em execução. Avaliar o impacto da selecção de um dadosegmento de código neste contexto é uma tarefa muito complexa, que tem queser refeita para cada modelo do processador.

28.3. Não é realista avaliar o desempenho de um processador actual sem usar umcompilador optimizador. Todos os resultados mostrados nestas transparênciasforam obtidos com compiladores apropriados.

28

Geração de código

Exemplos de operações de optimização

Optimização de alto nível (a nível do código-fonte)Integração de subrotinas

Optimização local (em blocos básicos)Eliminação de subexpressões comunsPropagação de constantesOptimização de expressões aritméticas

Optimizações globaisEliminação global de subexpressõesPropagação de cópiasDeslocação de código para fora dos ciclosEliminação de variáveis de indução

Optimizações dependentes do processadorRedução de “força”Escalonamento de operaçõesOptimização de deslocamentos em saltos condicionais

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 29/31

Notas:

29.1. A complexidade de um compilador é uma das principais limitações ao número deoptimizações que pode ser efectuado.

29.2. A maior parte das optimizações é sensível à ordem porque são efectuadas(phase-ordering problem).

29.3. Um tarefa importante do compilador é atribuir variáveis a registos. Trata-se deum problema NP-completo, mas existem heurísticas quase-lineares de muito boaqualidade. Contudo, as heurísticas só dão bons resultados se existir um númerorazoável de registos de uso geral livres (pelo menos 16 para valores inteiros eregistos adicionais para dados em vírgula flutuante).

29

Geração de código

Impacto das optimizações

Variação de número e frequência das operações segundo o nível deoptimização.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 30/31

Notas:

30.1. A figura indica claramente que a utilização de programas não optimizados para aavaliação de desempenho é um erro.

30.2. Significado dos níveis de optimização (cada nível inclui o anterior):

0 Sem optimização.1 Optimizações locais, sequenciamento de código e alocação local de registos.2 Optimizações globais, transformação de ciclo e alocação global de registos.3 Integração de rotinas (inlining).

30

Geração de código

Características favoráveis de uma ACI

Regularidade: os três principais componentes de um conjunto deinstruções (operações, tipos de dados e modos de endereçamento)devem ser independentes.Contra-exemplo: restringir os registos que podem ser usados com certasclasses de instruções.

Fornecer primitivas, não soluções. Recursos especializados para certasfunções podem não ter utilidade geral.

Simplificar a avaliação de alternativas. A complexidade doprocessamento (pipelines) obriga o compilador a ter em conta muitasalternativas.

Fornecer instruções que permitam usar informação determinada emtempo de compilação.

2006 — AAC (FEUP/MIEIC) Arquitectura do conjunto de instruções 31/31

Notas:

31.1. As extensões multimédia das arquitecturas actuais violam conscientemente quasetodas as regras:

• são “soluções”, não primitivas;• têm poucos registos;• os tipos de dados não têm correspondência nas linguagens de alto nível.

Na verdade, estas arquitecturas são versões reduzidas e incompletas deprocessadores vectoriais usados em cálculo científico.

31.2. Como resultado destas características, as instruções para multimédia são apenasusadas em algumas subrotinas preparadas manualmente, embora estejam a serfeitos esforços para alterar a situação. Alguns compiladors, por exemplo, tentamaproveitar as instruções SSE e SSE2 existentes nas implementações recentes daarquitectura IA-32.

31.3. O Vax tem uma instrução de invocação de subrotina que recebe uma máscaraespecificando os registos a guardar. Como se trata de informação disponível emtempo de compilação, não seria necessário deixar a interpretação da máscara acargo do CPU.

31