Compreendendo o slot de atraso de branch e a pré-busca de previsão de branch no pipelining de instrução

Deixe-me definir:

  • Branch delay slot: Normalmente os montadores reordenam instruções para mover algumas instruções imediatamente após a instrução de branch, de modo que a instrução movida sempre será executada, independentemente de branch é obtido ou não, sem deixar o sistema em estado inconsistente.

  • Pré-busca de previsão de branch: prever qual será o resultado da condição de ramificação e, em seguida, pré-buscar instruções do local resultante, para que sejam executadas imediatamente após a instrução de ramificação.

Agora , vamos considerar a sequência de execução abaixo (abaixo, F: instrução Fetch, D: instrução Decodificação, X: eXecute, M: Acesso à memória, W: Write back):

BRANCH F D X M W INSTR1 F D X M W INSTR2 F D X M W INSTR3 F D X M W 

Normalmente, a condição do branch é avaliada e executada no estágio X. Nesta fase, INSTR1 e INSTR2 já foram iniciados e estas são as instruções que podem ser afetadas por nossa escolha de usar ou não o atraso de ramificação slots ou pré-busca de previsão de ramificação ou ambos. Não encontrei nenhum texto para discutir isso claramente. Portanto, tentei adivinhar como segue:

  • Quando usamos ambos, a sequência de instruções seria:

    BRANCH: branch-instruction INSTR1: branch-delay-slot INSTR2: branch-prediction-prefetch 
  • Quando usamos apenas a previsão de ramificação, a sequência de instruções seria:

    BRANCH: branch-instruction INSTR1: branch-prediction-prefetch-1 INSTR2: branch-prediction-prefetch-2 
  • Quando usamos apenas slots de retardo de ramal, a sequência de instruções seria:

    BRANCH: branch-instruction INSTR1: branch-delay-slot-1 INSTR2: branch-delay-slot-2 

Estou correto com isso? É como isso realmente acontece em casos diferentes? Ou há mais alguns detalhes?

Comentários

  • Eu não ' entendo " Quando usamos apenas a sequência de branch ": como pode haver slots de atraso de brach? Além disso, mostrar a peça do assembler que você parece ter em seu cabeçalho seria esclarecedor.
  • (1) " Eu não ' crie a " Quando usamos apenas a sequência de ramificação ": como pode haver intervalos de atraso de brach? " – corrigiu a frase, acidentalmente deixei incompleta Espero que faça sentido agora. (2) Não entendi: " Além disso, mostrar a peça do assembler que você parece ter em seu cabeçalho seria esclarecedor. " Faça quer dizer, devo especificar o montador com o qual estou trabalhando? Se sim: estou lendo o capítulo sobre pipelining do livro " Computer Organization and Design " de Patterson. Portanto, lidar com teoria pura e resolver problemas de exercício.

Resposta

Sim, pode ser o que aconteceria, embora eu não me lembre de nenhuma arquitetura que combinasse slots de previsão e atraso: se você tiver previsão, ela pode ser executada (pesquisa em uma pequena memória) em paralelo com a etapa de execução, de modo que nenhum slot de atraso seria necessário. h3> Comentários

  • obrigado a confirmar, porque tais cenários são cobertos nos problemas de exercícios do livro de Arquitetura de Computadores de Patterson. Ele dá soluções diretas sem dar qualquer explicação. Nem o capítulo o conteúdo discute isso.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *