Benötigt addq auf Xeon 2 Taktzyklen?

Benötigt addq auf Xeon 2 Taktzyklen?

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?

verwandte Informationen