Привет!
Wed, 23 Jun 2004 19:00:40 +0400, Vladimir Vassilevsky писал:
...
...
При компилляции предъявленного куска в практически неизменном состоянии компиллятор Hi-Tech PICC18 8.20PL4, дал полный код 658 байтов и время выполнения 14 800 циклов, т.е. около 60 000 тактов.
При ближайшем рассмотрении выясняется, что в данном "тесте" более 2/3 времени выполняется одна строка:
if(syndrome==syndtable[cj]) // Error position found
Небольшие манипуляции на уровне C-исходника, учитывающие особенности работы компиллятора Hi-Tech, привели к снижению времени выполнения до
10 240 циклов (40 960 тактов) и размеру исходника 626 байтов:// Nonzero syndrome - Iterative search of errors
ci = 31 ; // Cycle for all bits except parity do { { unsigned char * synd_tab_ptr = ( char * ) syndtable ; cj = 0 ; do { char a, b ; a = * synd_tab_ptr ; synd_tab_ptr ++ ; b = * synd_tab_ptr ; synd_tab_ptr ++ ; if ((( char )( syndrome ) == a ) && (( char )( syndrome >> 8 )) == b ) goto AA ; } while ( ++ cj < ci ) ; } syndrome <<= 1 ; // Recalculate the syndrome for next iteration if ( syndrome & 0x400 ) syndrome ^= 0x369 ; syndrome &= 0x3ff ; } while ( -- ci != 0 ) ; return 0xFF; // Error position not found - uncorrectable
AA: if ( ! cj ) // Single error? { InvertBit ( bchword, ci ) ; if ( parity == 1 ) return 1 ; // no error in parity ( * bchword ) ^= 1 ; // Correct parity return 2 ; } if ( parity ) return 0xff ; // More then 2 errors - uncorrectable InvertBit ( bchword, ci ) ; // Correct double error InvertBit ( bchword, ci - cj ) ; return 2 ;
При ручной оптимизации участка ищущего значение в syndtable на асме время снизилось до 8100 циклов.
Резюме:
Тест с подобной нагрузкой на однострочный участок кода способен отразить относительную производительность МК наверное в ещё меньшей степени чем рекламные заявления производителей этих МК. Всё что можно здесь увидеть это насколько удачно ложится данная языковая конструкция в данном контексте на архитектуру МК, а применительно к описанному случаю скорее оценивает реализацию конкретного компиллятора.
Александр Голов, Москва, snipped-for-privacy@mtu-net.ru