[an error occurred while processing this directive]
Если: все данные - 16 бит со знаком, матрица транспонирована (столбцы лежат по горизонтали), не учитываем накладные расходы на начальные загрузки адресных регистров, правильно разнесены саб-банки памяти, чтоб не было коллизий.... то 34 такта :)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено Зок Мёдов 26 июля 2005 г. 14:33
В ответ на: ну то есть быстрее быстрого алгоритма :). в этом случае у BF тоже самое отправлено yes 26 июля 2005 г. 11:24

m0 = 16; // row offset
m1 = -108 (x); // back to the first row modifier
// это и так понятно что
p0.l = _vector;
p0.h = _vector;
i0.l = _matrix;
i0.h = _matrix;
i1.l = _result;
i1.h = _result;
// собственно вычисления
r1 = [i0++m0] || r0 = [p0]; // r1.h = 1st elem of column0, r1.l = 1st elem of column1, и прыгаем на след. строку
a1 = r0.l * r1.h, a0 = r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+4];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+8];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+12];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m1]; // прыгаем на первую строку, column3:2 и далее аналогично
r2.h = (a1 += r0.h * r1.h), r2.l = (a0 += r0.h * r1.l) || r1 = [i0++m0] || r0 = [p0];

a1 = r0.l * r1.h, a0 = r0.l * r1.l || r1 = [i0++m0] || [i1++] = r2; // сохраняем результат
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+4];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+8];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+12];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m1];
r2.h = (a1 += r0.h * r1.h), r2.l = (a0 += r0.h * r1.l) || r1 = [i0++m0] || r0 = [p0];

a1 = r0.l * r1.h, a0 = r0.l * r1.l || r1 = [i0++m0] || [i1++] = r2;
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+4];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+8];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+12];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m1];
r2.h = (a1 += r0.h * r1.h), r2.l = (a0 += r0.h * r1.l) || r1 = [i0++m0] || r0 = [p0];

a1 = r0.l * r1.h, a0 = r0.l * r1.l || r1 = [i0++m0] || [i1++] = r2;
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+4];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+8];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m0];
a1 += r0.h * r1.h, a0 += r0.h * r1.l || r1 = [i0++m0] || r0 = [p0+12];
a1 += r0.l * r1.h, a0 += r0.l * r1.l || r1 = [i0++m1];
r2.h = (a1 += r0.h * r1.h), r2.l = (a0 += r0.h * r1.l);
[i1++] = r2;

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru