[an error occurred while processing this directive]
Я рад, что смог дистанционно помочь. С Вас стакан(:-)...Можно посмотреть на окончательный вариант кода этой подпрограммы?
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено GM 25 февраля 2005 г. 13:21
В ответ на: Разворачивание циклов отправлено nyavro 25 февраля 2005 г. 11:36

Развернул циклы как вы писали. Результат впечатляет: количество инструкций снизилось с 37тыс. до 16тыс.! Это 5% общей производительности.В сравнении с неоптимизированной функцией на С : 65 тыс. инструкций против 16 тыс. и размер кода 72 против 66 соответственно
Ну вот, видите, а вы говорили про какие-то несчастные 640! Не надо быть столь пессимистически настроенным(:-).

Сейчас Вы достигли коэффициента оптимизации 4 с хвостиком. Осталось снизить скорость всего в 1,5..2 раза, и Вы достигнете потолка оптимизации на ассемблере для данного множества инструкций. Далее придется только существенно менять алгоритм или процессор, увы.

Вот кстати, как Вы эти тысячи считаете?

+Высвободился регистр B, но возник вопрос - почему нельзя возвести в квадрат регистр А: SQUR A,B?
Возвести можно, такая команда есть SQUR A,А. Но зачем? В конце концов, Вам же нужно получить сумму квадратов частных сумм, поэтому лучшего места, чем асс В не придумать. Зачем Вам копить частные суммы во временном массиве, а потом брать их оттуда, возводить в квадрат и складывать. Это лишнее. Ну представьте сами, вот Вы получили текущую частную сумму в асс А, ну сдвиньте ее на сколько надо, возведите в квадрат и добавьте к содержимому асс В, как я Вам писал. В результате, после вычисления всех частных сумм Вы получаете непосредственно в асс В окончательный результат, который можно масштабировать и сохранить в массиве Y2.

Рекомендую обратить внимание на команду SQDST, она делает то, что доктор прописал, и быстро - всего один машинный цикл.

Эта команда что, перемножает только старшие части регистра А?
Ну а что Вы хотели? У процессора 17-битный перемножитель, а не 32-х!
Перемножить 32 на 32 это долгая песня, кроме того, подумайте, что Вы будете делать с 64-битным результатом? Почти наверное отсечете лишние 48 бит!

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

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


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

E-mail: info@telesys.ru