[an error occurred while processing this directive]
Я прикинул, получается более-менее похоже, но тесты все равно не внушают доверия
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено =AVR= 11 июля 2005 г. 11:53
В ответ на: Чтоб понять почему так, надо посмотреть ассемблерный листинг. отправлено -Tумблер- 11 июля 2005 г. 10:49

Судя по описанию, каждое (из 20 подряд) 16-битовое сложение RAM+RAM=RAM для AVR должно выглядеть примерно так:


lds r0,var0low
lds r1,var0high
lds r2,var1low
lds r3,var1high
add r0,r2
adc r1,r3
sts res0low,r0
sts res0high,r1

Это будет выполняться за 14 тактов, а 20-кратное inline повторение - за 280 тактов (17.5 мкс на 16 МГЦ или 35 мкс на 8 МГЦ). В результатах теста приведено 39.9 мкс на 8 МГЦ, что вполне правдоподобно. В зависимости от того, как компилятор трактует volatile, все переменные могли бы стать регистровыми, и аналогичная операция заняла бы всего 3 такта для случая A=B+C или 2 такта для A=A+B:


;A=B+C. A=r0r1, B=r2r3, C=r4r5
movw r4,r0
;A=A+B. A=r4r5, B=r2r3
add r4,r2
adc r5,r3

Думаю, и для других архитектур будет нечто подобное. Поэтому тесты эти, как и все другие, весьма условны.

Вывод, как всегда, однозначен - или вылизывание руками ассемблерных процедур для выжимания из минимального камня максимальной производительности, или ваяние программ на С для максимального камня без необходимости оптимизации, т.к. все равно вытянет. Последняя тенденция явно перевешивает, и скоро моргать светодиодами все будут исключительно из-под микроосей, и под ними же благополучно терять принятые по UART на скорости 9600 байты, если в UARTе не будет аппаратного 64-байтового двойного FIFO :((

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

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

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

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


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

E-mail: info@telesys.ru