реклама на сайте
подробности

 
 
> addsub для tms320c6416
qxov
сообщение May 25 2007, 06:55
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406



abcdefgh --> (a+cool.gif(a-cool.gif(c+d)(c-d)(e+f)(e-f)(g+h)(g-h)
(все восьмибитное)

Результат оптимизации ниже. Лучше пока ничего в голову не приходит.


...
#pragma DATA_ALIGN(8)
double data[DATA_SIZE];
...

for(int i=0;i<DATA_SIZE;i++)
{
double dblVal=_amemd8_const(&data[i]);
int ph=_packh4(_hi(dblVal),_lo(dblVal));
int pl=_packl4(_hi(dblVal),_lo(dblVal));
int a=_add4(ph,pl);
int s=_sub4(ph,pl);
double adde=_mpysu4(a,0x10101010);
double sube=_mpysu4(s,0x01010101);
int hival=_hi(adde)|_hi(sube);
int loval=_lo(adde)|_lo(sube);
_amemd8(&data[i])=_itod(hival,loval);
}
...


PS: давайте делиться своими находками? =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
qxov
сообщение Nov 29 2007, 12:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406



Ядро должно быть таким:

double dblVal=_amemd8_const(&metrix[i]);
int ph=_packh4(_hi(dblVal),_lo(dblVal));
int pl=_packl4(_hi(dblVal),_lo(dblVal));
// если разложить в хитром порядке заранее, то будет на 30% быстрее
// int ph=_hi(dblVal);
// int pl=_lo(dblVal);
int a=_add4(pl,ph);
int s=_sub4(pl,ph);
double adde=_mpyu4(a,0x01010101);
double sube=_mpyu4(s,0x01010101);
int hival=(_hi(sube)<<8)|_hi(adde);
int loval=(_lo(sube)<<8)|_lo(adde);
_amemd8(&metrix[i])=_itod(hival,loval);
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.02064 секунд с 7
ELECTRONIX ©2004-2016