Quantos ciclos são necessários para adicionar ints longos em um xeon?

de testes de cronometragem, parece que são necessários 2 pulsos de clock.

/ proc / info diz

nome do modelo: CPU Xeon Intel (R) Xeon (R) @ 2.80GHz

Exemplo de código c (loop.02.c)

unsigned long i, j=0;
for(i=0; i<(0xFFFFFFFF);i++)   j+=3;

código assembler

21:loop.02.c     **** for(i=0; i<(0xFFFFFFFF);i++) j+=3;
34                            .loc 1 21 0
35 001e 48C745F0              movq    $0, -16(%rbp)
35      00000000
36 0026 EB0A                  jmp     .L2
37                    .L3:
38 0028 488345F8              addq    $3, -8(%rbp)
38      03
39 002d 488345F0              addq    $1, -16(%rbp)
39      01
40                    .L2:
41 0032 B8FEFFFF              movl    $4294967294, %eax
41      FF
42 0037 483945F0              cmpq    %rax, -16(%rbp)
43 003b 76EB                  jbe     .L3

então o loop executa 5 instruções: addq addq movl cmpq jbe

o loop itera 0xFFFFFFFF = 16 ^ 8 = 4294967296 = 4G vezes

/ usr / bin / time -f% e ./loop.02

rende 10,78 segundos, quase todos os quais estão no circuito

4G * 5 instruções / 10,78 segundos = 1.85G instruções / seg

versus os ciclos anunciados de 2.80GHz / s

para uma média de 2,8 / 1,8 = 1,6 ciclos / instrução

essa taxa faz sentido se, digamos, 2 das 5 instruções no loop tome 2 ciclos e os outros levam 1 ciclo.

Essa é a interpretação correta dos resultados de tempo?

onde é uma especificação do número de ciclos por instrução?

boddyl
fonte