vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2007-05-25 01:08 am

Сравнение архитектур процессоров

Берем простой, хотя и нетривиальный си-шный код, и сравниваем количество получившихся машинных команд. Компилятор GCC 4.1.2, оптимизация -O1. Исходный код такой:
unsigned long rot13_hash (unsigned char *str, unsigned int len)
{
unsigned long hash = 0;

while (len-- > 0) {
hash += *str++;
hash -= (hash << 13) | (hash >> 19);
}
return hash;
}
Результаты:

АрхитектураКоманд в циклеВсего команд
ARM613
Thumb817
MIPS32917
Intel 386925
MIPS161017
Blackfin1122

Для MIPS и Blackfin компилятор не догадался заменить два арифметических сдвига на один циклический. Предположим, мы исправили компилятор. Тогда получится так:

АрхитектураКоманд в циклеВсего команд
ARM613
MIPS32715
MIPS16815
Thumb817
Blackfin819
Intel 386925

Хорошо видно, насколько архитектура Intel 386, она же Pentium, проигрывает RISC-процессорам.

[identity profile] spamsink.livejournal.com 2007-05-24 10:02 pm (UTC)(link)
А теперь берем старый добрый GCC 3.4.3 для x86_64, заменяем unsigned long на unsigned и получаем 15 команд, из них 9 в цикле:
rot13_hash:
        movl    $0, %edx
        decl    %esi
        cmpl    $-1, %esi
        je      .L6
.L4:
        movzbl  (%rdi), %eax
        addl    %eax, %edx
        incq    %rdi
        movl    %edx, %eax
        roll    $13, %eax
        subl    %eax, %edx
        decl    %esi
        cmpl    $-1, %esi
        jne     .L4
.L6:
        movl    %edx, %eax
        ret


Now what?

[identity profile] spamsink.livejournal.com 2007-05-24 10:14 pm (UTC)(link)
Я тебя умоляю. Все эти страшненькие x86 командочки декодируются с переименованием регистров во внутреннее трехадресное представление и исполняются (одновременно, если готовы и если есть ресурс) за столько тактов, сколько нужно именно этому представлению, а не сколько там было оригинальных команд.

[identity profile] http://users.livejournal.com/_kalle_/ 2007-05-25 07:34 am (UTC)(link)
Ну, вышеприведенный пример, по крайней мере, объясняет происхождение слова "Децл" Image

/* Яндекс на запрос "decl" выдает:
"Translit? Возможно, имелось в виду: «децл» " */