Во удивил! :-)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Tiny12 02 июля 2003 г. 14:16
В ответ на: Bill-у и другим, то интересовался сравнением кода на АСМ и кода на С(+) отправлено L.A. 02 июля 2003 г. 10:03

история ручной оптимизации (кому интересно)

лет несколько назад обратился один клиент из производителей с просьбой "немного дописать" чужую программу. Беда состояла в том, что внутренний флеш был занят существующей версией на 95% и запрашиваемые модификации ну никак не лезли. К слову сказать, на тот момент это был наиболее емкий чип из данной серии. Время ( == деньги) идет, результата никакого. По анализу получаемого кода клиенту была предложена ручная оптимизация ассемблерного кода, есссо за доп плату. Арифметика принималась в расчет простая -- если удасться СУЩЕСТВЕННО сократить объем кода, то можно и сэкономить на разнице в цене чипов с разным объемом памяти (а тогда это было 2-3 уе на чип.) При плане выпуска 1000 изделий в год (забегая вперед, скажу что тут нас надурили, производство было гораздо больше -- больше можно было и просить :). Короче, договорились на $2000 и вперед. Оптимизация проводилась по следующим пунктам:
- сначала убирались лишние MOV'ы -- т.е. очевидные не меняющие результата операции. -- уже дало 20% доп места! программа уже влезала в память!
- убирались по возможности локальные переменные -- очень часто можно обойтись аккумулятором для этого. речь идет не о регистровых переменных, а о том, что часто переменная нужна однократно или полученный результат используется однократно, чаще всего в циклах, т.е. хранить-то его не надо между итерациями! -- еще 10%
- оптимизировался доступ к массивам, -- 10%
- переходы по условиям -- 10% -- тут уже получили двукратную экономию, но результат еще не лез в отведенное место, т.е. вдвое меньшую память.

По-видимому, это предел "механической" оптимизации, т.е. без изменения алгоритмической части. В итоге цель была достигнута путем переписывания на асме наиболее кривых участков. Далее все было оформлено как либка (для простоты дальнейших модификаций из с), пересобрано и все до сих пор довольны :)

а изначально написанный на асме код действительно в 3-4 раза эффективнее, причем что для "незаточенного" пика, что для "заточенного" авр. личное мнение: не знаю, кто проектировал систему команд AVR, но она откровенно баздарна!! эффективность ее на мой взгляд ок 30%, для пика я ее оцениваю 80-90% (эталон для меня - VAX)
На очень специфичных задачах вроде реализации автоматов состояний/переходов по состоянию входов пик на 20М сравним с авр 16М именно из-за кривости команд последнего и того факта, что любой из известных мне компиляторов считает своим долгом "застолбить" регистры с 16 по 31.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru