Xeon では、addq に 2 クロック サイクルが必要ですか?

Xeon では、addq に 2 クロック サイクルが必要ですか?

Xeon で long int を追加するには何サイクル必要ですか?

タイミング試験から、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 サイクルかかる場合、そのレートは意味を持ちます。

これはタイミング結果の正しい解釈でしょうか?

命令あたりのサイクル数の指定はどこにありますか?

関連情報