Latência das instruções da CPU nos processadores x86 e x64

10

Estou procurando uma tabela ou algo semelhante que possa me ajudar a calcular a eficiência do código de montagem.

Como eu sei, o bit shifting leva 1 clock da CPU, mas eu realmente procuro quanto requer adição (subtração deve ser a mesma), multiplicação e como calcular o tempo de divisão se eu souber valores que estão se dividindo.

Eu realmente preciso de informações sobre valores inteiros, mas tempos de execução flutuantes também são bem-vindos.

    
por ST3 10.09.2013 / 19:05

3 respostas

9

Em geral, cada uma dessas operações usa um único ciclo de clock para executar se os argumentos estiverem nos registros nos vários estágios do pipeline.

O que você quer dizer com latência? Quantos ciclos uma operação gasta na ULA?

Você pode achar esta tabela útil: link

Como os processadores modernos são super escalares e podem ser executados fora de ordem, muitas vezes você pode obter instruções totais por ciclo que excedam 1. Os argumentos para o comando macro são os mais importantes, mas a operação também é importante, pois as divisões levam mais tempo que o XOR (< 1 latência do ciclo).

Muitas instruções x86 podem levar vários ciclos para completar alguns estágios se eles forem complexos (comandos REP ou piores MWAIT, por exemplo).

    
por 10.09.2013 / 19:26
7

O cálculo da eficiência do código de montagem não é o melhor caminho a seguir nesses dias de oleodutos Super Escalares de Execução Fora de Ordem. Isso varia de acordo com o tipo de processador. Ele vai variar de acordo com as instruções antes e depois (você pode adicionar código adicional e fazer com que ele seja executado mais rápido às vezes!). Algumas operações (principalmente divisões) podem ter um intervalo de tempo de execução mesmo em chips mais previsíveis mais antigos. Na verdade, o tempo de muitas iterações é o único caminho a percorrer.

    
por 10.09.2013 / 20:56
3

Você pode encontrar informações sobre a cpu da Intel no desenvolvedor de software da intel manuais . Por exemplo, a latência é de 1 ciclo para uma adição inteira e 3 ciclos para uma multiplicação de números inteiros.

Eu não sei sobre multiplicação, mas espero que o acréscimo tenha sempre um ciclo.

    
por 10.09.2013 / 19:36