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사이클을 사용한다면 이 속도는 의미가 있습니다.

이것이 타이밍 결과의 올바른 해석입니까?

명령어 당 사이클 수에 대한 사양은 어디에 있습니까?

관련 정보