O Conjunto de Instruções Modos de endereçamento 1 Modos de endereçamento Implícito Com base no opcode, o processador fica a saber implicitamente onde estão os dados envolvidos na operação Imediato Constante que é dada na própria instrução Exemplo: instruções PUSH e POP Exemplos: R1 ← constante, instrução LOCO do MAC-1 Directo Indica a posição de memória onde estão os valores envolvidos na operação Exemplos: R1 ← M[x], instruções LODD e ADDD do MAC-1 2 Modos de endereçamento Registo directo Indica o registo onde se encontram os dados Registo indirecto Especifica-se um registo e o valor guardado nesse registo é posição de memória onde estão os dados Exemplo: R1 ← R2 Eficiente, pois não são feitos acessos à memória Exemplos: R1 ← M[R2], instruções PSHI e POPI do MAC-1 Útil para indexar vectores Indirecto Especifica-se uma posição de memória - o conteúdo dessa posição de memória dá uma outra posição onde estão localizados os dados São necessários dois acessos à memória Exemplo: R1 ← M[ M[x] ] Útil para aceder a listas e a matrizes bidimensionais 3 Modos de endereçamento Duplamente indirecto Semelhante ao anterior, mas a primeira posição a aceder é dada por um registo Exemplo: R1 ← M[ M[R2] ] Indexado Acede-se à posição de memória dada pela soma do conteúdo de um registo com um deslocamento (offset) indicado na instrução Exemplos: R1← M[R2 + offset], instruções LODL, ADDL do MAC-1 Útil para indexar vectores e gerir variáveis locais Existem outras designações para este modo: Endereçamento Local ou Baseado – quando é relativo ao Stack Pointer Endereçamento Relativo – quando é relativo ao Program Counter 4 Modos de endereçamento Possível notação para indicar os modos de endereçamento Modo Notação Efeito Imediato MOV R1, #N R1 ← N Directo MOV R1, addr R1 ← M[addr] Indirecto MOV R1, [addr] R1 ← M[M[addr]] Registo-directo MOV R2, R1 R2 ← R1 Registo-indirecto MOV R2, [R1] R2 ← M[R1] Indexado MOV R2, addr[R1] R2 ← M[addr+R1] Duplamente indirecto MOV R2, [[R1]] R2 ← M[M[R1]] 5 Modos de endereçamento Memória Exemplo Qual será o valor em R2 após… MOV R2, #2 MOV R2, 2 R2 = 2 R2 = 6 MOV R2, R1 R2 = 5 MOV R2, [R1] R2 = 3 MOV R2, 2[R1] R2 = 11 MOV R2, [2] R2 = 45 0 1 2 3 4 5 6 7 8 9 10 xx 10 6 8 27 3 45 11 12 13 14 xx R1 5 R2 ??? 6 Unidade de Controlo 7 CPU – esquema geral (revisão) Processador Palavra de controlo Unidade de Controlo Datapath Estado (flags) End. Dados Leitura/Escrita Memória R/W 8 Unidade de controlo Gera as palavras de controlo que definem o que é feito no datapath As palavras de controlo são geradas de acordo com as instruções dadas num programa Tipicamente podem ser seguidas duas arquitecturas Unidade de controlo uni-ciclo Fetch e execução feitos no mesmo ciclo Unidade de controlo multi-ciclo Tipicamente um ciclo para o fetch seguido de um número variável de ciclos para a execução 9 Unidade de controlo uni-ciclo Durante um único ciclo do processador efectuam-se os seguintes passos : Leitura da instrução que está na posição de memória indicada pelo registo Program Counter (PC) – fetch Descodificação da instrução (para determinar quais os sinais de controlo a aplicar ao datapath) Execução da instrução No final do ciclo… …Incrementa-se o valor de PC ou, … …no caso de haver um salto, carrega-se em PC o endereço de destino do salto 10 Unidade de controlo uni-ciclo Unidade de controlo Load / INC Controlo de saltos PC Memória de programa Memória de dados Descodificador de Endereços Leitura/Escrita Tipo de salto Descodificador de Instruções Palavra de Controlo Datapath Bits de estado (flags) 11 Unidade de controlo uni-ciclo Considerações Unidade de controlo simples Basicamente, a cada instrução do programa vai corresponder a uma palavra de controlo a aplicar ao datapath Restrições: Exige separação entre memória de dados e memória de instruções (para fazer o fetch e a execução no mesmo ciclo) O formato das instruções tem que ser muito regular para facilitar a descodificação O tempo de duração de cada ciclo fica muito dependente dos tempos de acesso às memórias 12 Unidade de controlo multi-ciclo Cada instrução do programa requer tipicamente mais do que um ciclo para a sua execução A cada instrução do programa vai corresponder uma sequência de várias micro-instruções Estas sequências são obtidas através… …de um circuito sequencial que vai gerando as palavras de controlo Arquitectura Hardwired …de um “micro-programa” que define a sequência de micro-instruções correspondente à instrução a executar. Arquitectura Microprogramada 13 Unidade de controlo multi-ciclo Por cada instrução: Ciclo de fetch: A instrução que está na posição de memória indicada pelo PC é lida para um registo especial, designado por Instruction Register (IR) O opcode da instrução irá fazer com que a unidade de controlo siga uma sequência de estados pré-definida Dada por um circuito sequencial (hardwired) , ou por uma sequência de palavras de controlo em memória (microprogramada) Em cada um desses estados aplica-se uma palavra de controlo ao datapath Cada estado corresponde a um ciclo do sinal de relógio – podem assim haver vários ciclos para a execução 14 Unidade de controlo multi-ciclo Arquitectura Hardwired Unidade de controlo Load / INC PC Memória de dados e programa IR Descodificador de Endereços Leitura/Escrita Circuito Sequencial Palavra de Controlo Bits de estado (flags) Datapath 15 Unidade de controlo multi-ciclo Arquitectura Multiprogramada Unidade de controlo Load / INC Memória de dados e programa PC Descodificador de Endereços IR Opcode→Micro-endereço MUX Controlo de Load / INC micro-saltos S Micro-PC Leitura/Escrita Memória de controlo (ROM) Palavra de Controlo Bits de estado (flags) Datapath 16 Unidade de controlo multi-ciclo Considerações UC mais complexa, mas mais flexível: Não exige separação entre memórias para programa e dados No caso da unidade microprogramada, é fácil substituir ou acrescentar novas instruções ao conjunto de instruções Permite uma execução mais eficiente de instruções mais complicadas Que corresponderiam a várias instruções uni-ciclo, cada uma exigindo um acesso à memória para efectuar o fetch Modelo mais próximo dos processadores actuais 17 Unidade de controlo do MAC-1 Arquitectura (simplificada) Mux INC MPC ROM 256 x 32 N Z Lógica de micro saltos S A C N D F H L D R L A R R W L D R E R C R B R A A D D R 18 Unidade de controlo do MAC-1 Estrutura das palavras de controlo 31 S A 0 C N D F H L L R W L D A D R E R R C B A ADDR CND – controlo de saltos: 00 – sem salto 01 – salta se N = 1 (resultado negativo) 10 – salta se Z = 1 (resultado nulo) 11 – salto incondicional ADDR – endereço de salto no micro-programa (8 bits) Restantes sinais – aplicam-se ao datapath 19 Datapath do processador MAC-1 RC RB RA 4 4 4 LE 31 (0) PC (1) AC (2) SP (3) IR (4) TMP (5) -1 (6) +1 (7) Amask (8) SMask S A 0 C N D F H L L R W L D A D R E R R C B A ADDR Estrutura da palavra de controlo LAR BUS B MAR BUS A (...) MDR Dados 0 Mux 1 SA LDR N Z F H 2 BUS C Endereços ALU 2 WR RD Nota: Amask tem o valor ‘0FFF’ Deslocamento SMask tem o valor ’00FF’ 20 Unidade de controlo do MAC-1 Exemplo: Vamos supor que se pretende executar a instrução LODD x O efeito da instrução é AC ← M[x] e o formato é: 0 0 0 Opcode (4 bits) 0 x x x x x x x x x x x x Posição de memória a ler (12 bits) Após o fetch, a instrução encontra-se carregada no registo de instruções (IR). A execução começa a partir desse ponto 21 Unidade de controlo do MAC-1 Exemplo (cont.) Em primeiro lugar, há que carregar o endereço x no registo MAR, mas tal não se consegue fazer num único ciclo TMP ← IR & Amask # Amask tem o valor ‘0FFF’ MAR ← TMP Depois do endereço a aceder estar no registo MAR, lê-se a memória e o resultado virá em MDR. Para finalizar transfere-se de MDR para AC MDR ← M[MAR] AC ← MDR 22 Unidade de controlo do MAC-1 Exemplo (fim) Em suma, a seguinte sequência de micro-instruções: TMP ← IR & Amask # obter o endereço x MAR ← TMP # colocar no registo de endereços MDR ← M[MAR] # ler o conteúdo do endereço AC ← MDR # transferir para o acumulador 4 palavras de controlo, o que implica 4 ciclos para executar a instrução 23 Avaliação do desempenho 24 Desempenho Como avaliar o desempenho de um CPU ? Tipicamente pensa-se na frequência do sinal de relógio... Por exemplo, “O processador XPTO funciona a 2GHz, logo é mais rápido que o XPTA, que funciona a 1.8GHZ” ... mas será que essa é uma boa medida !?? A frequência do sinal de relógio (apesar de importante) é apenas um de vários factores que contribuem para o desempenho de um processador... 25 Desempenho Exemplo: considere dois CPUs com uma unidade de controlo multi-ciclo: CPU A demora 2 ciclos de relógio a executar uma instrução (em média) funciona a 1.0 GHz (T=1ns) CPU B demora 3 ciclos de relógio a executar uma instrução (em média) funciona a 1.33 GHz (T=0.75 ns) Qual é o melhor? Podemos calcular o tempo médio por instrução: TA = 1.00 ns 2 = 2.00 ns TB = 0.75 ns 3 = 2.25 ns Tendo em conta os dados, a escolha iria para o processador A, pois em média demora menos tempo a executar cada instrução 26 Desempenho O que será então uma boa medida para o desempenho? A medida objectiva mais precisa é o tempo de execução dos programas Mas os programas são diferentes entre si: se um programa P1 corre mais depressa num computador A do que no computador B, nada nos diz que um programa P2 verifique o mesmo. Para além do CPU, o tempo de execução dos programas também depende de outros factores por exemplo, das memórias utilizadas. 27 Desempenho Exemplo (tempos de execução, em segundos) Programa Computador A Computador B Computador C P1 2 10 20 P2 60 30 10 Pode-se afirmar que: A é 5 vezes mais rápido do que B a correr o programa P1 B é 2 vezes mais rápido do que C a correr o programa P1 C é 6 vezes mais rápido do que A a correr o programa P2 ... Estas afirmações são válidas quanto ao desempenho mostrado a correr os programas P1 e P2 individualmente ... 28 Desempenho Tendo em conta o peso de cada um dos programas no sistema obtém-se uma medida mais consistente Exemplo: vamos supor que P1 corre 20% das vezes e que P2 corre 80% das vezes Programa Computador A Computador B Computador C P1 2 10 20 P2 60 30 10 48.4 26.0 12.0 Tempo médio (seg.) Pode-se afirmar que: B é 1.86 vezes mais rápido que A para os programas P1 e P2 C é 4.03 vezes mais rápido que A para os programas P1 e P2 C é 2.17 vezes mais rápido que B para os programas P1 e P2 29 Desempenho Conclusão: Só se conseguiria avaliar objectivamente o desempenho de um sistema caso se soubesse os tempos de execução de todos os programas, bem como a sua carga relativa... Impossível..., … mas conseguem-se aproximações válidas para os casos típicos Existem programas para avaliação de desempenho – benchmarks – que visam estabelecer aproximações realistas Alguns exemplos SPECs (Standard Performance Evaluation Corporation) SYSMark (BapCo - Business Applications Performance Corporation) PCMark e 3DMark (FutureMark) 30 Desempenho Desempenho do processador Tempo de execução de um programa: Texecução = Nciclos Trelógio = Ninstruções CPI Trelógio = Ninstruções CPI / frelógio Ninstruções – número de instruções do programa CPI – número de ciclos por instrução frelógio – frequência do sinal de relógio 31 Desempenho Compilador Sintetizando: T execução Conjunto de instruções N instruções CPI f relógio Organização do sistema Hardware Conjunto de instruções Organização do sistema 32 Desempenho Conclusão O desempenho do processador depende de vários factores: Hardware (circuitos, tecnologia de fabrico) Organização (datapaths, unidade de controlo, etc.) Conjunto de instruções Compilador (e programador, claro está ) A frequência do relógio apenas está ligada aos dois primeiros factores... 33 Desempenho Outras medidas populares MIPS Million of Instructions Per Second MIPS N instruções Tempo de execução 10 6 f relógio CPI 10 6 Depende apenas do CPI e da frequência de relógio... MFLOPS million floating-point operations per second MFLOPS N operações sobre nº s reais Tempo de execução 10 6 Grande parte dos programas efectua operações sobre inteiros, pelo que esta medida pode não ser adequada 34