vak: (Default)
[personal profile] vak
Берем простой, хотя и нетривиальный си-шный код, и сравниваем количество получившихся машинных команд. Компилятор 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-процессорам.

Date: 2007-05-25 08:33 (UTC)
From: [identity profile] thesz.livejournal.com
На интеле она выполняется менее, чем за такт. Либо более, чем за два. ;)

Кстати, i386 ты тоже поставил циклический сдвиг, или нет?

Теперь - про размер команд. CISC почти в два раза компактней, чем RISC. VLIW, соответственно, в два раза хуже RISC, а TTA - вдвое хуже VLIW. ;)

Правда, не на этом, твоем специально подобранном коде. ;)