Estou procurando alguma tabela ou algo semelhante que possa me ajudar a calcular a eficiência do código de montagem.
Como eu sei, a troca de bits leva 1 relógio da CPU, mas eu realmente estou olhando quanto custa adição (subtração deve levar o mesmo), multiplicação e como presumivelmente calcular o tempo de divisão se eu souber valores que estão dividindo.
Eu realmente preciso de informações sobre valores inteiros, mas os tempos de execução de flutuação também são bem-vindos.
Respostas:
Em geral, cada uma dessas operações também executa um único ciclo de clock para executar se os argumentos estiverem registrados 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: http://www.agner.org/optimize/instruction_tables.pdf
Como os processadores modernos são super escalares e podem ser executados fora de ordem, geralmente é possível obter instruções totais por ciclo que excedem 1. Os argumentos para o comando macro são os mais importantes, mas a operação também é importante, pois as divisões demoram mais que XOR (<1 latência do ciclo).
Muitas instruções x86 podem levar vários ciclos para concluir alguns estágios, se forem complexas (comandos REP ou MWAIT pior, por exemplo).
fonte
div
eidiv
) é ainda pior: é microcodificada e tem uma latência muito maior queadd
oushr
, e nem é totalmente canalizada em qualquer CPU. Tudo isso é direto das tabelas de instruções de Agner Fog, por isso é bom que você tenha vinculado isso.Calcular a eficiência do código de montagem não é o melhor caminho atualmente nos pipelines super escalares de execução fora de ordem. Isso varia de acordo com o tipo de processador. Ele variará nas instruções antes e depois (você pode adicionar código extra e executá-lo mais rápido às vezes!). Algumas operações (principalmente a divisão) podem ter uma variedade de tempos de execução, mesmo em chips mais antigos e previsíveis. Na verdade, o tempo de muitas iterações é o único caminho a percorrer.
fonte
Você pode encontrar informações sobre a Intel cpu nos manuais do desenvolvedor de software da Intel . Por exemplo, a latência é de 1 ciclo para uma adição de número inteiro e 3 ciclos para uma multiplicação de números inteiros.
Não sei sobre multiplicação, mas espero que a adição sempre tome um ciclo.
fonte