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

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

Отправлено SM 07 января 2003 г. 01:22
В ответ на: Ответ: отправлено ВН 04 января 2003 г. 15:52

Надо рассматривать параллелизм не как "параллельное выполнение N команд", а как "выполнение одной команды, выполняющей кучу операций ОДНОВРЕМЕННО (а не друг за другом)".
Мало того, надо учитывать что есть команды, которые производят результат не сразу, а например как умножение, через такт (или плавучка - большинство через 3 такта, а загрузка - так вообще 4 такта). Тут надо применять т.н. программную конвейеризацию. То есть (для примера) в каждый такт можно ставить по команде умножения, а команды сложения результатов умножения ставить в параллель умножениям по мере появления результатов. Причем надо смотреть, что бы не было конфликтов между командами, то есть каждый раз "оглядываться" на несколько тактов назад, и смотрерть, что бы несколько команд во время одного такта не умудрились писать в один регистр, или делать две записи одновременно в разные регистры на одном опер. блоке (например выполняется MOV на юните D1, а 3 такта назад была команда LDW на том-же юните, но с другим регистром-приемником - в результате есть конфликт - на одном такте юниту D1 требуется произвести 2 записи в разные регистры - выполнится только LDW, а ассемблер ничего про это не скажет).
С этим видом оптимизации - конвейеризацией - (на циклах) очень неплохо справляется CCS. Линейный код он оптимизировать НЕ УМЕЕТ. Точнее не хочет, иначе пришлось бы запретить прерывания на весь код.
Кроме того (у 6711) есть команды которые занимают операционный блок на несколько тактов. То есть после такой команды нельзя некоторое количество тактов задействовать тот-же блок (пока он принимает информацию из регистров - это касается IEEE-double-плавучки и умножения 32х32=>64). При писании на С естественно, CCS это отслеживает.
Есть еще один способ - писать на "линейном ассемблере" (linear assembler). Тут все пишется БЕЗ ПАРАЛЛЕЛИЗМА, но на ассемблере. А компилятор сам все оптимизирует, на сколько у него ума хватает.


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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru