algebramix_doc 0.3
|
#include <fft_triadic_threads.hpp>
Definition at line 26 of file fft_triadic_threads.hpp.
typedef implementation<vector_linear,vector_naive> NVec |
Definition at line 28 of file fft_triadic_threads.hpp.
Definition at line 30 of file fft_triadic_threads.hpp.
typedef R::U U |
Definition at line 31 of file fft_triadic_threads.hpp.
typedef FFTER::V V |
Definition at line 29 of file fft_triadic_threads.hpp.
fft_triadic_threads_transformer | ( | nat | n | ) | [inline] |
~fft_triadic_threads_transformer | ( | ) | [inline] |
Definition at line 45 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::ffter.
{ delete ffter; }
static void copy | ( | CC * | d, |
nat | drs, | ||
nat | dcs, | ||
CC * | s, | ||
nat | srs, | ||
nat | scs, | ||
nat | r, | ||
nat | c | ||
) | [inline, static] |
Definition at line 48 of file fft_triadic_threads.hpp.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::outer_fft_triadic_task_rep< CC >::execute().
{ for (nat j=0; j<c; j++, d+=dcs, s+=scs) { CC* dd= d; CC* ss= s; for (nat i=0; i<r; i++, dd+=drs, ss+=srs) *dd= *ss; } }
void dfft_triadic | ( | CC * | c, |
nat | stride, | ||
nat | shift, | ||
nat | steps, | ||
nat | step1, | ||
nat | step2 | ||
) | [inline] |
Definition at line 186 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::ffter.
{ if (step1 == 0 && step2 == steps && steps > thr) fft_triadic (true, c, stride, shift, steps); else ffter->dfft_triadic (c, stride, shift, steps, step1, step2); }
void dfft_triadic | ( | CC * | c, |
nat | stride, | ||
nat | shift, | ||
nat | steps | ||
) | [inline] |
Definition at line 174 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::ffter.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::direct_transform_triadic().
{ if (steps <= thr) ffter->dfft_triadic (c, stride, shift, steps); else fft_triadic (true, c, stride, shift, steps); }
void direct_transform_triadic | ( | C * | c | ) | [inline] |
Definition at line 202 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::depth, and fft_triadic_threads_transformer< C, FFTER, thr >::dfft_triadic().
{ dfft_triadic (c, 1, 0, depth); }
void fft_triadic | ( | bool | direct, |
CC * | c, | ||
nat | stride, | ||
nat | shift, | ||
nat | steps | ||
) | [inline] |
Definition at line 122 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::ffter, and fft_triadic_threads_transformer< C, FFTER, thr >::min_reps.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::dfft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::ifft_triadic().
{ nat nt= threads_number; nat half1= steps >> 1; nat half2= steps - half1; nat len1= binpow ((nat) 3, half1); nat len2= binpow ((nat) 3, half2); if (steps <= thr || len2 <= min_reps || nt == 1) { if (direct) ffter->dfft_triadic (c, stride, shift, steps); else ffter->ifft_triadic (c, stride, shift, steps); } else { for (nat stage=0; stage<2; stage++) { if ((stage == 0) ^ (!direct)) { // Below is multi-threaded the following loop: // C* cc1 = c; // for (nat i=0; i< len2; i++, cc1 += stride) // if (direct) // ffter->dfft_triadic (cc1, stride * len2, shift, half1); // else // ffter->ifft_triadic (cc1, stride * len2, shift, half1); nat bsz= min_reps * len1; // Recall min_reps < len2 CC* buf= mmx_new<CC> (nt * bsz); task tasks[nt]; for (nat i=0; i<nt; i++) { nat sta= min_reps * (( i * len2) / (min_reps * nt)); nat end= min_reps * (((i+1) * len2) / (min_reps * nt)); tasks[i]= new outer_fft_triadic_task_rep<CC> (ffter, direct, buf + i*bsz, end-sta, len2, c + sta*stride, stride, shift / len2, half1); } threads_execute (tasks, nt); mmx_delete<CC> (buf, nt * bsz); } else { // Below is multi-threaded the following loop: // CC* cc2= c; // for (nat i=0; i<len1; i++, cc2 += stride*len2) // if (direct) // ffter->dfft_triadic (cc2, stride, shift + i*len2, half2); // else // ffter->ifft_triadic (cc2, stride, shift + i*len2, half2); task tasks[nt]; for (nat i=0; i<nt; i++) tasks[i]= new inner_fft_triadic_task_rep<CC> (ffter, direct, i, nt, len1, c, stride, shift, half2); threads_execute (tasks, nt); } } } }
void ifft_triadic | ( | CC * | c, |
nat | stride, | ||
nat | shift, | ||
nat | steps | ||
) | [inline] |
Definition at line 180 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::ffter.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::inverse_transform_triadic().
{ if (steps <= thr) ffter->ifft_triadic (c, stride, shift, steps); else fft_triadic (false, c, stride, shift, steps); }
void ifft_triadic | ( | CC * | c, |
nat | stride, | ||
nat | shift, | ||
nat | steps, | ||
nat | step1, | ||
nat | step2 | ||
) | [inline] |
Definition at line 194 of file fft_triadic_threads.hpp.
References fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::ffter.
{ if (step1 == 0 && step2 == steps && steps > thr) fft_triadic (false, c, stride, shift, steps); else ffter->ifft_triadic (c, stride, shift, steps, step1, step2); }
void inverse_transform_triadic | ( | C * | c, |
bool | shift = true |
||
) | [inline] |
nat depth |
Definition at line 35 of file fft_triadic_threads.hpp.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::direct_transform_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::inverse_transform_triadic().
FFTER* ffter |
Definition at line 34 of file fft_triadic_threads.hpp.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::dfft_triadic(), fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic(), fft_triadic_threads_transformer< C, FFTER, thr >::ifft_triadic(), and fft_triadic_threads_transformer< C, FFTER, thr >::~fft_triadic_threads_transformer().
nat len |
Definition at line 36 of file fft_triadic_threads.hpp.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::inverse_transform_triadic().
const nat min_reps = 27 [static] |
Definition at line 32 of file fft_triadic_threads.hpp.
Referenced by fft_triadic_threads_transformer< C, FFTER, thr >::outer_fft_triadic_task_rep< CC >::execute(), and fft_triadic_threads_transformer< C, FFTER, thr >::fft_triadic().
Definition at line 37 of file fft_triadic_threads.hpp.
Definition at line 38 of file fft_triadic_threads.hpp.