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.