Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Evgeny Sharandin                     2:5020/755.12  28 Feb 2002  11:22:00
 To : Michael Bolotnicov
 Subject : 8-based FFT
 -------------------------------------------------------------------------------- 
 
 Привет Michael!
 
 24 февраля 2002 года (а было тогда 01:45)
 Michael Bolotnicov в своем письме к All писал:
 
  MB> Вопрос1: как-нибудь можно еще ускорить это?
 
 Hемного можно, если поменять порядок вычислений и, тем самым, облегчить
 компайлеру работу.
 
  MB> Или уже пора записывать временные данные в регистры CPU, перписывать
  MB> на асме и прочее?
 
 Зачем? Hормальный компилятор (gcc или Intel C сойдут ;) сделает не хуже. Intel
 C еще и SSE попытается раскрутить.
 
  MB> Вопрос2: это портабельно (если договориться о длине float-a) ?
 
 Портабельно. А специально договариваться уже давно не требуется - на то
 ай-яй-яй с ansi и существуют.
 
  MB> == Hачало 8FFT.C ==
  MB> #define sq2 0.707106781
 
  MB> void fft8(float *data) {
  MB>   float d[16],e[16];
 
  MB>   // precalculations
  MB>   // reusable values 1
  MB>   d[0]=data[0]+data[8];     // (h0+h4)
  MB>   d[2]=data[4]+data[12];    // (h2+h6)
 
 Здесь сразу можно вычислить e[0], e[4]. А так как d[0]/d[2] в дальнейшем не
 используется, то нет необходимости в их сохранении. Если компилятор достойный,
 то лобовая запись
 e[0]=data[0]+...+...+...
 e[4]=data[0]+...-...-...
 сгенерится в код без лишних обращений к памяти.
 
  MB>   d[4]=data[0]-data[8];     // (h0-h4)
  MB>   d[6]=data[4]-data[12];    // (h2-h6)
 
 аналогично с e[2]/e[6].
 
  MB>   d[8]=data[2]+data[10];    // (h1+h5)
  MB>   d[10]=data[6]+data[14];   // (h3+h7)
 
 e[8]/e[12]. Причем, пока они еще в регистрах сопроцессора, то можно сразу
 вычислить и data[0].
 
  MB>   d[12]=data[2]-data[10];   // (h1-h5)
  MB>   d[14]=data[6]-data[14];   // (h3-h7)
 
 И.т.д. ;). Просто учти, что дублирование содержимого регистров (коих в х86
 всего-то 8 штук) и  сложение с вычитанием современные процы делают в разы
 быстрее загрузки/сохранения содержимого из/в L1 (не говоря уже о l2 или
 памяти). Да даже умножение (но не деление) куда менее болезненная операция, чем
 обращение за операндами в память.
 
 С уважением, Evgeny                           28 февраля 2002 года
 
 ---
  * Origin: LID (2:5020/755.12)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 8-based FFT   Michael Bolotnicov   24 Feb 2002 02:45:00 
 8-based FFT   Evgeny Sharandin   28 Feb 2002 11:22:00 
 8-based FFT   Michael Bolotnicov   03 Mar 2002 01:34:00 
 8-based FFT   Evgeny Sharandin   11 Mar 2002 11:37:00 
 8-based FFT   Michael Bolotnicov   14 Mar 2002 02:31:00 
 8-based FFT   Evgeny Sharandin   17 Mar 2002 20:50:00 
 8-based FFT   Comoderator Of Ru Algorithms   05 Mar 2002 21:34:47 
Архивное /ru.algorithms/39153c7e0a97.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional