[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено AntZ 08 апреля 2004 г. 04:26
В ответ на: SM спасибо за ссылку. Вопрос: по конфе вроде для DSP СИ компиляторы плохие, это так? отправлено lightport 07 апреля 2004 г. 20:36

Вы правы, для многих DSP компилеры дают неоптимальный код... Но это не потому, что разработчики плохие, просто система команд у многих DSP очень богата и разнобразна. Иногда ассемблерная команда заменяет пять-десять строк на С и на десяток ассеблерных команд может уйти несколько дней обдумывания и экспериметов (суровая оптимизация при борьбе за каждый такт). DSP имеет кучу команд которые применяются только для специальных алгоритмов.

Вот пример могучей инструкции которая заменяет 12 строк на C


MAXDIFF ACx, ACy, ACz, ACw

TRN0 = TRN0 >> #1
TRN1 = TRN1 >> #1
ACw(39–16) = ACy(39–16) – ACx(39–16)
ACw(15–0) = ACy(15–0) – ACx(15–0)
if (ACx(31–16) > ACy(31–16))
{ bit(TRN0, 15) = #0 ; ACz(39–16) = ACx(39–16) }
else
{ bit(TRN0, 15) = #1 ; ACz(39–16) = ACy(39–16) }
if (ACx(15–0) > ACy(15–0))
{ bit(TRN1, 15) = #0 ; ACz(15–0) = ACx(15–0) }
else
{ bit(TRN1, 15) = #1 ; ACz(15–0) = ACy(15–0) }

Или вот какой с компилер может применить вот такую команду


SWAP4 AR4, T0

This instruction performs four parallel moves between four auxiliary registers (AR4, AR5, AR6, and AR7) and four temporary registers (T0, T1, T2, and T3) in one cycle

Tmp1=T0;
Tmp2=T1;
Tmp3=T2;
Tmp4=T3;
T0=AR4;
T1=AR5;
T2=AR6;
T4=AR7;
AR4=Tmp1;
AR5=Tmp2;
AR6=Tmp3;
AR7=Tmp4

Столь извращенная система команд - это одновремменно и божья благодать и проклятие DSP. На ассемблере 55xx возможны такие чудеса, от которых C писателям сразу плохо становится - простое переписывание а асме может легко ускорить алгоритм в десять раз, но и цена тоже немалая - скорость разработки снижается во столько раз, во сколько ускоряется скорость работы программы...

Видимо оптимум - делать управляющий код (код без циклов, или с небольшими циклами) на C и код который производит однотипные циклические операции на Asm'е

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru