¿Cuántos ciclos son necesarios para agregar entradas largas en un xeon?
de las pruebas de tiempo, parece que se necesitan 2 tics de reloj.
/ proc / info dice
nombre del modelo: Intel (R) Xeon (R) CPU X5660 @ 2.80GHz
código c de muestra (loop.02.c)
unsigned long i, j=0;
for(i=0; i<(0xFFFFFFFF);i++) j+=3;
código ensamblador
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
entonces el ciclo ejecuta 5 instrucciones: addq addq movl cmpq jbe
el ciclo itera 0xFFFFFFFF = 16 ^ 8 = 4294967296 = 4G veces
/ usr / bin / time -f% e ./loop.02
produce 10.78 segundos, casi todos los cuales están en el bucle
4G * 5 instrucciones / 10.78 segundos = 1.85G instrucciones / seg.
versus los ciclos anunciados de 2.80GHz / seg
para un promedio de 2.8 / 1.8 = 1.6 ciclos / instrucción
esa tasa tiene sentido si, por ejemplo, 2 de las 5 instrucciones en el ciclo toman 2 ciclos y las otras toman 1 ciclo.
¿Es esta la interpretación correcta de los resultados del tiempo?
¿Dónde está una especificación del número de ciclos por instrucción?