Microcontroladores e Interfaces 3º Ano Eng. Electrónica Industrial Carlos A. Silva 2º Semestre de 2005/2006 http://www.dei.uminho.pt/lic/mint Assunto: Pipeline Aula #5 28 Mar 06 Revisão Na implementação do pipeline temos problemas de implementação que são chamados de pipeline hazards. Existem três tipos de hazards: 2 Estrutural Acontece quando se tenta usar o mesmo recurso de duas maneiras diferentes. Por ex., não é possível usar a unidade de decode para duas instruções simultaneamente. Dados Acontece quando se tenta usar um item antes de estar disponível. P. ex., uma instrução depende de um resultado que está num estágio anterior do pipeline.
Revisão Controlo Acontece quando se tenta tomar uma decisão antes da condição ter sido avaliada. Por ex., nas instruções de salto condicional. 3 Hazard de dados Os hazard de dados acontecem devido a dependência de dados entre os operandos das instruções. Que tipos de dependência podemos identificar entre as instruções? Read-After-Write (RAW) Uma instrução escreve um valor que será lido posteriormente por uma outra instrução. P. ex., and $s, $s2, $s3 or $s4, $s, $s2 Está a ocorrer algum hazard? 4 2
Hazard de dados 5 Write-After-Read (WAR) Uma instrução lê um valor de um registo/memória que será posteriormente escrito por uma outra instrução. P. ex., and $s, $s2, $s3 Está a ocorrer algum hazard? or $s2, $s4, $s2 Write-After-Write (WAW) Uma instrução escreve um valor num registo/memória que será posteriormente escrito por uma outra instrução. P. ex., and $s, $s2, $s3 Está a ocorrer algum hazard? or $s, $s4, $s2 Hazard de dados Read-After-Read (RAR) Uma instrução lê um valor de um registo/memória que será posteriormente lido por uma outra instrução. P. ex., and $s, $s2, $s3 or $s5, $s4, $s2 Está a ocorrer algum hazard? 6 3
Consequências da dependência de dados: Técnicas: Correcção dos dados. Temos que detectar e resolver as dependências. Eficiência. O stall do pipeline é prejudicial ao desempenho, logo temos que procurar outras técnicas para resolvê-lo. Unidade de Stall Register forwarding. Register interlocking. Hazard de dados 7 Hazard de dados Register interlocking No register file, cada registo terá um bit associado Este bit indica se o conteúdo do registo está correcto 0: O conteúdo pode ser usado : Não use o conteúdo do registo. As instruções ao usar o registo reservam-no Exemplo: A Intel implementa esta técnica no processador Itanium: É chamado de NaT (Not-a-Thing). Este bit é usado no apoio à execução especulativa do pipeline. 8 4
Control Hazard Devemos, em cada ciclo, fazer o fetch de uma instrução de modo a manter o pipeline cheio. sub $2, $, $3 throughput máximo and $2, $2, $5 or $3, $6, $2 add $4, $2, $2 sw $5, 00($2) 9 Control Hazard Contudo, na estrutura usada, as operações de branch apenas são avaliadas no estágio MEM. Execução das instrução de branch ocorre no estágio MEM 0 5
Control Hazard A este atraso na determinação da condição do salto (branch) chamamos control hazard ou branch hazard. 40 beq $, $3, 7 44 and $2, $2, $5 48 or $3, $6, $2 52 add $4, $2, $2 72 lw $4, 50($2) Control Hazard Temos quatro maneiras de resolver o hazard: Stall do pipeline até a condição ser resolvida. Redução do atraso do salto. Predição do salto. 2 6
Primeira solução : Reduzir o atraso do salto Na implementação actual, a condição de branch só será resolvida no estágio de acesso à memória. Se movermos a condição de acesso para mais cedo, então menos instruções serão perdidas no pipeline. Quais elementos do datapath são usados na execução das instruções de branch? 3 Primeira solução : Reduzir o atraso do salto Alguns processadores conseguem resolver a condição do salto durante a fase de ID. Esta solução implica fazer o forwarding dos registos e a detecção de hazards na fase de ID. Como a comparação era feita na ALU que fica no estágio de EX, alguma electrónica terá que ser introduzida para realizar a comparação no estágio ID. 4 7
Primeira solução : Reduzir o atraso do salto Problema: Com o aumento das micro-operações executadas durante a fase de decoding, ID, a duração deste estágio aumentará. Qual é a consequência deste aumento? 5. Potencial desequilíbrio das micro-operações executadas em cada estágio, ou seja a duração dos estágios tornam-se desequilibradas. Menor rendimento do pipeline. 2. Limite na frequência máxima do processador. Primeira solução : Reduzir o atraso do salto Delayed branch execution A técnica anterior permitiu reduzir o atraso do salto para um ciclo de relógio. and $s, $s2, $s3 loop: add $s, $s2, $s beq $s5, $s4, loop lw $t, 00($t2) lw $t, 00($s) Devido a execução da instrução beq será feito o stall do pipeline até a condição ser avaliada na fase de decoding. Se observarmos o código acima, verificamos que a instrução add $s, $s2, $s será sempre executada. A técnica de delayed branch execution consiste em executar sempre a instrução a seguir ao branch. 6 8
A técnica anterior permitiu reduzir o atraso do salto para um ciclo de relógio. delay slot Primeira solução : Reduzir o atraso do salto and $s, $s2, $s3 beq $s5, $s4, loop add $s, $s2, $s lw $t, 00($t2) A instrução a seguir ao beq será sempre executada loop: lw $t, 00($s) Como a instrução a seguir ao branch é sempre executada, o compilador ou o programador tem a responsabilidade de garantir que a instrução a seguir é válida ou é a instrução nop. Com a junção desta técnica, o atraso associado à avaliação da condição da instrução de branch foi totalmente eliminado. 7 Segunda solução : Predição do salto Temos três tipos de estratégias de predição: Fixa Assume-se que o resultado da condição é conhecido (p. ex., falso) e o fetch é feito conforme o pressuposto. Esta técnica é pouco efectiva na execução de loops. Porque? Ex. Motorolo 68020 e VAX /780. Estática O valor da condição depende do tipo de salto. Nos saltos condicionais (if... then... else) assume-se que a condição é sempre falsa. Nos loops (for, while,...) assume-se que a condição é sempre verdadeira. Melhor desempenho que a predição fixa. 8 9
Dinâmica Segunda solução : Predição do salto Na avaliação da condição é analisado a execução do programa, ou seja o resultado das últimas instruções executadas. 9 Segunda solução : Predição do salto (dinâmica) Em vez de assumir que a condição é sempre falsa ou verdadeira, alternativamente consulta-se uma tabela de modo a verificar se, da última vez que a instrução foi executada, a condição era falsa ou verdadeira. Uma implementação desta técnica chama-se branch prediction buffer ou branch history table. Um buffer de predição de salto é uma memória de pequena dimensão indexada pela parte baixa do endereço da instrução. A memória tem um bit que indica se um salto foi feito recentemente. 20 0
Segunda solução : Predição do salto (dinâmica) 2 Segunda solução : Predição do salto (dinâmica - bit) Exemplo: int v= 0; for( int n= 0; n < 0; ++n ) v= v + n; Considere um loop implementado com um salto condicional. O loop é executado nove vezes. A seguir, a condição de salto falha. Qual será a percentagem de sucesso da predição do salto, assumindo que o bit de predição permanece no buffer de predição? 22
Segunda solução : Predição do salto (dinâmica - bit) Resposta: 23 Iteração Predição Resultado 0 0 2 3 4 5 6 7 8 9 0 Em execução contínua, a predição irá falhar na primeira e na última iteração do loop. A predição da última iteração está errada, sendo que este erro é inevitável, uma vez que o estado do bit indica salto efectuado, quando na verdade deve falhar. A predição errada do primeiro bit deve-se ao seu estado inicial. Por isso, num loop em que o salto ocorre 90% das vezes a predição foi correcta em 80% dos casos. Segunda solução : Predição do salto (dinâmica - bit) Qual seria o melhoramento se a nossa janela de análise fosse mais larga, ou seja se considerássemos mais do que apenas o último caso? Impacto das últimas n instruções de branch sobre o resultado da predição: Tipo de mistura n Compiler Business Scientific 0 64. 64.4 70.4 9.9 95.2 86.6 2 93.3 96.5 90.8 3 93.7 96.6 9.0 4 94.5 96.8 9.8 5 94.7 97.0 92.0 24 2
Segunda solução : Predição do salto (dinâmica - 2 bit) 25 Segunda solução : Predição do salto (dinâmica - 2 bit) Exemplo: Qual será a percentagem de sucesso da predição do salto, assumindo que estamos a usar 2 bits para predição? Iteração Predição actual Predição próx. Resultado 0 weakly taken 2 3 4 5 6 7 8 9 weakly taken 0 26 3
Control Hazard : Excepções 27 Uma outra forma de hazard de controlo são as excepções. Porque? Por exemplo, consideremos a seguinte instrução add $s, $s2, $s Caso os valores dos registos fossem tais que ocorresse um overflow, então precisaríamos de passar o controlo para a rotina de serviço à interrupção. Todos as latches do pipeline teriam que ser limpas (flush) e não deveríamos permitir que o resultado da operação afectasse a memória ou o file register. Finalmente, o endereço da instrução teria que ser guardado num registo especial (EPC Exception Program Counter) para a rotina de serviço à excepção possa saber qual foi a instrução que provocou a excepção. Control Hazard: Excepções Algumas causas possíveis para as excepções são: Pedido de dispositivo I/O. Chamada ao sistema operativo pela aplicação. Usar uma instrução indefinida. Problema com o hardware (p. ex., falha de um bit da memória). A existência de várias fontes de excepções levanta o problema de como associar uma excepção a uma determinada instrução, pois várias instruções estarão a ser executadas simultaneamente no pipeline. 28 4
Control Hazard : Excepções Solução: Prioridade nas excepções Associar diferentes excepções a diferentes estágios do pipeline. Devido a dificuldade de associar correctamente a excepção à instrução que a gerou, alguns processadores indicam a região onde ocorreu a excepção, deixando para o SO ou o utilizador descobrir a instrução correcta. Neste caso dizemos que temos uma interrupção ou excepção imprecisa (imprecise interrupt ou imprecise exception) 29 Como obter processadores ainda mais rápidos? Superpipelining. Superscalar. Temas Avançados Very Long Instruction Word (VLIW). Dynamic pipeline scheduling ou dynamic pipelining. 30 5
Temas Avançados: Superpipelining Ao diminuirmos as operações realizadas em cada estágio, iremos diminuir a sua latência, logo é possível aumentar a frequência do relógio. Exemplo MIPS R4000 8 estágios: IF: Primeira fase do fetch da instrução. Iniciação ao acesso à cache. IS: Segunda fase do fetch da instrução. RF: Descodificação da instrução e fetch dos registos, verificação dos hazards, detecção do hit da cache de instrução. 3 Temas Avançados: Superpipelining EX: Execução, o que inclui o cálculo do endereço efectivo, operações da ALU, cálculo do destino de um salto condicional e verificação da sua condição. DF: Primeira fase do acesso à cache de dados. DS: Segunda fase do acesso à cache de dados. TC: Verificação do Tag, determinação se houve um hit da cache. WB: Escrita do resultado da operação no file register. Este estágio é usado apenas pelas instruções de load e de registo-registo. 32 6
Temas Avançados: Superscalar Em vez de aumentarmos o número de estágio podemos aumentar o número de unidades funcionais. Com esta abordagem, passamos a executar várias instruções no mesmo ciclo do relógio. Neste processadores usamos a métrica IPC (instructions per clock cycle) IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB 33 Temas Avançados: Superscalar O projecto em duplo pipeline assume que as instruções têm o mesmo tempo de execução. Na prática, o tempo de execução das instruções varia Depende do tipo de instrução. Usa várias unidades de execução Ligadas a um único pipeline. Por ex., duas unidades de inteiros, duas unidades de FP. A este tipo de projecto chamamos de Superscalar. 34 7
Temas Avançados: Dynamic Pipelining Scheduling Na implementação com escalonamento dinâmico das instruções, novas instruções são executadas enquanto o stall é resolvido. Devido a diferença na latência das instruções e devido ao stall ou a sua complexidade (FP), as instruções serão executadas fora de ordem. Na implementação superscalar do pipeline teremos problemas acrescidos de hazard de dados devido a dependência das instruções. Estes hazards podem ser resolvidos: pelo compilador por hardware especial que irá fazer o scheduling das instruções. 35 Temas Avançados: Dynamic Pipelining Scheduling De modo a garantir interrupções precisas, o estágio a seguir a execução da instrução terá que restabelecer a ordem das instruções e verificar a ocorrência de excepções. A um sistema que implemente execução fora de ordem e predição dinâmica dos saltos, nós classificamo-lo como um processador que faz a execução especulativa do programa (speculative execution) 36 8
Exemplo: Pentium 4 37 Conclusão 38 9
Conclusão 39 20