2

Сколько циклов требуется для добавления длинных целых в xeon?

Судя по временным испытаниям, необходимо 2 такта.

/proc/info говорит

Название модели: Intel(R) Xeon(R) CPU X5660 с частотой 2,80 ГГц

пример кода 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,80 ГГц / сек

в среднем 2,8/1,8 = 1,6 цикла /инструкция

эта скорость имеет смысл, если, скажем, 2 из 5 инструкций в цикле занимают 2 цикла, а остальные - 1 цикл.

это правильная интерпретация результатов времени?

где указывается количество циклов на инструкцию?

0