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] skolk.livejournal.com 2007-05-25 11:21 am (UTC)(link)
А теперь время смотреть доку на конкретное ядро, и выяснять, какой там MIPS. А разительная разница проявляется на S-boxes, а не на группе сети Фейстеля (может, Файштеля правильно?) ...

Кстати, Ваш хэш в идеале должен бы питаться не байтами, а словами...
Для Вашего теста padding некритичен, можно 0-ями.

[identity profile] panchul.livejournal.com 2007-05-25 05:13 pm (UTC)(link)
Колиснык! Сколько лет, сколько зим! (Точнее 20 лет, 20 зим)! Как жизнь молодая? Женился? Откуда Вакулеко знаешь? Чем занимаешься?

[identity profile] skolk.livejournal.com 2007-05-27 07:33 pm (UTC)(link)
Извиняюсь, все-все напутал.
Сеть Фейстеля построена, как положено, на чистом XOR.

Суммирование было перед S-boxes, а сдвиг после, но и его лучше к бинарному оператору сети не относить, поскольку он портит ассоциативность.