AVR vs PIC

Привет!

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

Reply to
Alexander Golov
Loading thread data ...
Reply to
Alexander Torres
Reply to
Maxim Polyanskiy
Reply to
Artem Kamburov
Reply to
Artem Kamburov
Reply to
Artem Kamburov
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
Alexander Torres
Reply to
Vladimir Vassilevsky
Reply to
Vladimir Vassilevsky
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
Maxim Polyanskiy

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.