在 xeon 上,addq 需要 2 個時脈週期嗎?

在 xeon 上,addq 需要 2 個時脈週期嗎?

在至強上添加長整型需要多少週期?

從計時試驗來看,似乎需要 2 個時脈週期。

/proc/info 說

型號名稱:Intel(R) Xeon(R) CPU X5660 @ 2.80GHz

範例 C 程式碼(loop.02.c)

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

彙編程式碼

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

所以循環執行5條指令:addq addq movl cmpq jbe

循環迭代 0xFFFFFFFF = 16^8 = 4294967296 = 4G 次

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

產生 10.78 秒,幾乎所有時間都在循環中

4G*5條指令/10.78秒=1.85G指令/秒

與宣傳的 2.80GHz 週期/秒相比

平均 2.8/1.8 = 1.6 個週期/指令

如果循環中 5 個指令中的 2 個週期需要 2 個週期,而其他指令需要 1 個週期,則該速率是有意義的。

這是對計時結果的正確解釋嗎?

每條指令的周期數的規範在哪裡?

相關內容