|
Обращение матриц на ПЛИС |
|
|
|
 |
Ответов
|
Feb 10 2006, 13:35
|
Знающий
   
Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827

|
#include <math.h>
Обращение выполняется за 4 этапа. С двумя последними мне все понятно, там "* + -" с плавающей точкой. И с регуляризацией понятно. Но во что обойдется реализация этапа 2 в ПЛИС. Как я понимаю, придется сделать значительный кусок АЛУ DSP, который делает sqrt и 1/x во флоате.
Вообще сколько стоит денег в Москве такое реализовать? Может, руководство согласится и вместо TS203 мы поставим ПЛИС и простенький DSP..
Но не люблю я эти Плисы. Тут есть много проектов, которые накрылись из-за того, что аффторы не справились из-за Плис.
A - массив 16x16 структур {float Re, float Im}. d - число для регуляризации матрицы N - 16, N2 - 32 (так автор алгоритма захотел) S и K - временные массивы 16x16 структур {float Re, float Im}.
void inv(float *A, int N, int N2, float *S, float *K, float d) { int p,q,k,pr,pi,qr,qi,kr,ki; float a,ar,ai;
//(Этап 0 приведен полностью) регуляризация q=0; for (p=0;p<N;p++) { A[p*N2+q]+=d; q+=2; }
//(Этап 1 приведен полностью) вычисление S //p=1 a=A[0]; S[0]=sqrt(a); S[1]=0.; K[0]=1./S[0]; K[1]=0.; //re и im for (p=0;p<N2;p++) { S[p]=A[p]*K[0]; }
//p>1 pr=0; pi=1; for (p=1;p<N;p++) { pr+=2; pi+=2; a=A[p*N2+pr]; for (q=0;q<=p-1;q++) { a-=(S[q*N2+pr]*S[q*N2+pr]+S[q*N2+pi]*S[q*N2+pi]); }
S[p*N2+pr]=(float)sqrt(a); S[p*N2+pi]=0.; K[p*N2+pr]=1./S[p*N2+pr]; K[p*N2+pi]=0.;
qr=pr; qi=pi; for (q=p+1;q<N;q++) { qr+=2; qi+=2; ar=A[p*N2+qr]; ai=A[p*N2+qi]; for (k=0;k<=p-1;k++) { ar-=(S[k*N2+pr]*S[k*N2+qr]+S[k*N2+pi]*S[k*N2+qi]); ai-=(S[k*N2+pr]*S[k*N2+qi]-S[k*N2+pi]*S[k*N2+qr]); } S[p*N2+qr]=ar*K[p*N2+pr]; S[p*N2+qi]=ai*K[p*N2+pr]; } } //(Этап 1 завершен)
//Этап 2 пропущен. Это перемножение матриц S и K ar-=(S[p*N2+kr]*K[k*N2+qr]-S[p*N2+ki]*K[k*N2+qi]); ai-=(S[p*N2+kr]*K[k*N2+qi]+S[p*N2+ki]*K[k*N2+qr]); K[p*N2+qr]=ar*K[p*N2+pr]; K[p*N2+qi]=ai*K[p*N2+pr];
//Этап 3 пропущен. Это перемножение матриц K и транспонированной K ar+=(K[p*N2+kr]*K[q*N2+kr]+K[p*N2+ki]*K[q*N2+ki]); ai+=(K[p*N2+ki]*K[q*N2+kr]-K[p*N2+kr]*K[q*N2+ki]); A[]=ar; A[]=ai; A[]=ar; A[]=-ai;
return; };
|
|
|
|
Сообщений в этой теме
jojo Обращение матриц на ПЛИС Feb 3 2006, 18:29 cdg ИМХО если не за 1 такт надо, то с ПЛИС и не стоит ... Feb 7 2006, 08:58 jojo Да, я все больше убеждаюсь, что ПЛИС "дороже ... Feb 7 2006, 10:46 cdg В пору аспирантской юности, помнится сталкивался с... Feb 7 2006, 15:26 Harbour На плис проект будет работать все равно быстрее че... Feb 8 2006, 07:35 des00 Цитата(Harbour @ Feb 8 2006, 02:35) На пл... Feb 8 2006, 08:52 Harbour Это правда если сравнивать современные DSP с доист... Feb 9 2006, 09:34 dxp Цитата(Harbour @ Feb 9 2006, 15:34) Это п... Feb 9 2006, 10:57 jojo Думаю, по меньшей мере последние этапы обращения м... Feb 9 2006, 11:17 Harbour Цитата(dxp @ Feb 9 2006, 12:57) Цитата(Ha... Feb 9 2006, 14:48 dxp Цитата(Harbour @ Feb 9 2006, 20:48) Ну-ну... Feb 10 2006, 05:25  des00 Цитата(dxp @ Feb 10 2006, 00:25) И если у... Feb 10 2006, 06:07 des00 Ну в качестве примера, RLE кодирование большого ма... Feb 9 2006, 15:33 Harbour Как по мне так RLE параллелится, это сильно зависи... Feb 9 2006, 18:45 Harbour Цитата(dxp @ Feb 10 2006, 07:25) Цитата(H... Feb 10 2006, 06:53 dxp Цитата(Harbour @ Feb 10 2006, 12:53) Ну-у... Feb 10 2006, 07:18 des00 Цитата(Harbour @ Feb 10 2006, 01:53) Как ... Feb 10 2006, 08:09 Harbour Статей про распараллеливание рле полно в инете, во... Feb 10 2006, 10:50 des00 ЦитатаСтатей про распараллеливание рле полно в ине... Feb 10 2006, 11:49 Harbour Цитата(des00 @ Feb 10 2006, 13:49) Тут сл... Feb 10 2006, 12:56 Harbour Прикинул на пальцах Ваши матрицы, вот чего вышло :... Feb 11 2006, 12:46 psL Код-----------------------------------------------... Feb 11 2006, 13:36 jojo В процессоре этап 1 выполняется за 14.3 мкс (7128 ... Feb 11 2006, 17:09 jojo Вытащил из процессора таблицу начальных приближени... Feb 13 2006, 10:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|