
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 サイクルかかる場合、そのレートは意味を持ちます。
これはタイミング結果の正しい解釈でしょうか?
命令あたりのサイクル数の指定はどこにありますか?