Semântica de latência de registros de leitura no ASM x86

1

Por tabelas de instruções do A. Fog, uma Ivy Bridge tem uma latência de 3 ciclos em uma instrução MOV.

Então, o seguinte levará 3 ciclos para mover o RAX para o endereço no RCX:

  mov               [rcx], rax

Minha pergunta é, isso implica que o RAX, que está sendo lido, não pode ser modificado para os próximos 2 relógios? Especificamente, o seguinte causaria um atraso de execução:

  mov               [rcx], rax
  inc               rax
    
por IamIC 03.09.2015 / 07:33

1 resposta

1

Em suma, sim. Isso fará com que o processador pare enquanto aguarda que a instrução seja concluída e que os dados estejam disponíveis antes que a próxima instrução possa ser executada. Não há como prever facilmente quais dados chegarão e que a instrução inc simplesmente não pode ser executada até que o mov esteja completo.

Isso pode não ser um grande problema, já que o processador pode programar instruções que não dependem do resultado da instrução mov para manter o núcleo funcionando.

Isso é conhecido como Execução fora de ordem e pode ajudar a reduzir o custo do processador trava ao esperar por instruções longas como estas.

Um esclarecimento adicional ...

Eu deveria ter lido melhor o seu exemplo, eu não acredito que a instrução mov [rcx], rax irá causar uma parada na instrução inc rax , mas fará com que qualquer coisa dependente de rcx pare.

A página que você vincula lista a taxa de transferência recíproca pela qual outra instrução desse tipo pode ser emitida. Especificamente, eu suponho que nesse período de tempo qualquer instrução com dependências semelhantes poderia ser emitida.

Assim, eu diria que o registro da RAX é renomeado , pois a instrução é enviada para execução ou é codificada na u-ops para a instrução. A próxima instrução pode trabalhar nesse registro, desde que não seja dependente dos resultados de uma operação anterior sendo armazenada em esse registro.

Então, em suas perguntas, exemplo, o que eu acredito que deveria acontecer é que a CPU efetivamente tem duas instruções cuja única dependência é o valor atual do registrador RAX e o valor nele é modificado apenas pela segunda vez. instrução. A primeira instrução deve ser despachada e a execução quase imediata pode começar na segunda instrução ( inc ).

    
por 03.09.2015 / 08:52