
Wie viele Zyklen sind zum Hinzufügen langer Ints auf einem Xeon erforderlich?
Aus den Zeittests geht hervor, dass 2 Taktimpulse erforderlich sind.
/proc/info sagt
Modellname: Intel(R) Xeon(R) CPU X5660 @ 2,80 GHz
Beispiel-C-Code (loop.02.c)
unsigned long i, j=0;
for(i=0; i<(0xFFFFFFFF);i++) j+=3;
Assemblercode
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
Die Schleife führt also 5 Anweisungen aus:addq addq movl cmpq jbe
die Schleife wird 0xFFFFFFFF = 16^8 = 4294967296 = 4G-mal wiederholt
/usr/bin/time -f %e ./loop.02
ergibt 10,78 Sekunden, davon fast alles in der Schleife
4G*5 Anweisungen / 10,78 Sekunden = 1,85G Anweisungen/Sek.
gegenüber den beworbenen 2,80 GHz Zyklen/Sek.
für einen Durchschnitt von 2,8/1,8 = 1,6 Zyklen/Befehl
Diese Rate ist sinnvoll, wenn beispielsweise 2 der 5 Anweisungen in der Schleife 2 Zyklen und die anderen 1 Zyklus benötigen.
ist dies die richtige Interpretation der Zeitergebnisse?
wo ist eine Angabe zur Anzahl der Zyklen pro Befehl?