Pergunta

Eu tenho o seguinte código MIPS e estou procurando reescrever/reordenar o código para poder reduzir o número de não, não instruções necessárias para a execução adequada do pipeline, preservando a correção.Supõe-se que o caminho de dados não para nem avança.O problema dá duas dicas:isso nos lembra que ramificações e saltos são atrasados ​​e precisam de seus slots de atraso preenchidos e sugere alterar o valor do deslocamento nas instruções de acesso à memória (lw,sw) quando necessário.

LOOP:  lw           $1, 100 ($2)
       addi         $1, $1, 1
       sw           $1, 500 ($2)
       addiu        $2, $2, 4
       bne          $2, $10, LOOP

É bastante óbvio para mim que este código incrementa o conteúdo de um array e o armazena em outro array.Portanto, não estou vendo exatamente como poderia reorganizar esse código, já que os índices precisam ser calculados antes de concluir o loop.

Meu palpite seria mover o eu instrução após a instrução de desvio, pois (até onde eu entendo) a instrução no slot de atraso é sempre executada.Então, novamente, não entendo muito bem esse assunto e gostaria de receber uma explicação.Eu entendo o pipeline em geral, mas não tanto a ramificação atrasada.Obrigado

Foi útil?

Solução

Uma maneira de preencher o slot de atraso do ramal seria:

addiu  $2, $2, 4  # We'll now iterate over [$2+4, $10] instead of [$2, $10[
LOOP:  lw           $1, 96 ($2)
       addi         $1, $1, 1
       sw           $1, 496 ($2)
       bne          $2, $10, LOOP
       addiu        $2, $2, 4  # Use the delay slot to increase $2

Outras dicas

Em termos da segunda dica:

Faça da 4ª instrução a 2ª.Ele pode ser canalizado (após o ID da 1ª instrução, se você usar a terminologia P/H) enquanto a primeira ainda é executada.Em seguida, faça o deslocamento na (antiga) 3ª instrução 496 em vez de 500.Presumo que você veja agora por quê?

Quanto à primeira dica, não estou muito familiarizado com a forma exata como as ramificações atrasadas são executadas (não implementadas no SPIM, então não me importei).A última instrução antiga provavelmente pode ser a penúltima, como o nome "atrasado" indica, mas não sei dizer como e por quê.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top