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: 2008-02-12 08:22 (UTC)
From: [identity profile] troosh.livejournal.com
На E3M получается такой код:
0014<0000d0> HS    a0800412 M_d0:
             ALS3  e405c005  ldgdb,3,sm [ %b[5] + 0 ], %b[5]
             ALS5  90060706  adds,5,sm %b[6], %b[7], %b[6]
             ALES  01c00000
0015<0000e0> HS    80000401 :
             ALS5  9406cd08  scls,5,sm %b[6], 13, %b[8]
0016<0000e8> HS    e0001424 :
             SS    806f04a0  ct %ctpr1 ? #NOT_LOOP_END
                             abn abnf=1, abnt=1
                             abp abpf=1, abpt=1
                             alc alcf=1, alct=1
             ALS3  9003c101  adds,3,sm %b[3], 1, %b[1]
             ALS4  90c00303  adds,4,sm 0, %b[3], %b[3]
             ALS5  92060804  subs,5,sm %b[6], %b[8], %b[4]
             ----  00000000
Если компилировать с профилированием или указать перед циклом "#pragma loop count(1000)", то начинает применяться APB (array prefetch buffer):
0014<000218> HS    80000401 M_218:
             ALS5  90060505  adds,5,sm %b[6], %b[5], %b[5]
0015<000220> HS    80001412 :
             SS    80002000
             ALS5  9405cd07  scls,5,sm %b[5], 13, %b[7]
             AAS   00011001  movab,1 area = 0, ind = 0, am = 1, be = 0, %db[1]
0016<000230> HS    80011412 :
             SS    806f04a0  ct %ctpr1 ? #NOT_LOOP_END
                             abn abnf=1, abnt=1
                             abp abpf=1, abpt=1
                             alc alcf=1, alct=1
             ALS5  92050704  subs,5,sm %b[5], %b[7], %b[4] ? %pcnt0
             CDS0  50400000  rlp,cd00 %pcnt0, >alc5
Т.е. в обоих случаях получам 3-х тактный цикл...

Date: 2008-02-12 12:40 (UTC)
From: [identity profile] troosh.livejournal.com
Да, он самый. На крышке стоит 1891ВМ4Я.
Документация есть, но она всё ещё не публичная,
хотя вроде были планы это изменить.

Date: 2008-02-12 13:31 (UTC)
From: [identity profile] troosh.livejournal.com
Ага, жаль... Но думаю, что если какая контора попросит, то дадут нужную информацию. Во всяком случае уже столько народа со своими задачами приходили, что уже давно пора не усно всё пересказывать, а предоставлять готовую документацию для ознакомления. Хотя с другой стороны и не предполагается, что кто-то на стороне будет писать под Эльбрусы на asm. Время подвигов ушло. ;)

Оно работает. Даже прошли гос. испытания (http://www.mcst.ru/news.shtml#071029).

С Бабаяном лично знаком не был, так что позволю себе не комментировать последнее высказывание...

Date: 2008-02-12 14:40 (UTC)
From: [identity profile] troosh.livejournal.com
Я так понимаю принят был процессор, машина на паре таких процессоров и весь софт под них. Должно быть доказали что соответствует ТЗ, я уж так подробно не вникал в это, - вроде явного негатива и проколов не было.

Понятно что сейчас мало кому нужно голое процессорное ядро, а E3M требует чипсета (северного моста), которого нет в кремнии, только в дорогом FPGA. Это основная проблема у E3M для вывода его на рынок. В этом году должны сделать E3S (кеш L2 не 256K, а уже 2М, два встроенных контроллера памяти и 3 межпроцессорных линка), - у него на много больше шансов быть реально востребованным.