Changeset 3089 in Sophya for trunk/SophyaProg/Tests/tfft.cc


Ignore:
Timestamp:
Oct 11, 2006, 12:58:10 PM (19 years ago)
Author:
ansari
Message:

prog tests: ajout test perfo multi-fft (tfft.cc) et amelioration test SwFits (tswfits.cc), Reza 11/10/2006

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaProg/Tests/tfft.cc

    r3077 r3089  
    1111#include "fftpserver.h"
    1212#include "fftmserver.h"
     13#include "fftmayer.h"
    1314#include "fftwserver.h"
    1415#include "ntoolsinit.h"
     
    4849static  int prtlev = 0;
    4950
     51//-------------------------------------------------
    5052template <class T>
    5153void TestFFTPack(T seuil, sa_size_t num)
     
    106108}
    107109
     110//-------------------------------------------------
    108111template <class T>
    109112int TestFFTS(T seuil, FFTServerInterface & ffts, sa_size_t num)
     
    197200}
    198201
    199 
    200 
    201 
    202 
     202inline void MayerFFTForw(r_4* d, int sz) {
     203  fht_r4(d, sz);
     204}
     205inline void MayerFFTForw(r_8* d, int sz) {
     206  fht_r8(d, sz);
     207}
     208
     209//-------------------------------------------------
     210template <class T>
     211int MultiFFTTest(T t, sa_size_t sz, int nloop, bool fgp)
     212{
     213  cout <<" ===> MultiFFTTest<T=r_" << sizeof(T) << "> NLoop= " << nloop << " ArrSz= " << sz << endl; 
     214  TVector< T > in(sz), incopie(sz);
     215
     216  incopie = in = RandomSequence();
     217  FFTPackServer fftp(false);
     218  TVector< complex<T> > outc;
     219   
     220  PrtTim("MultiFFT-LoopStart");
     221
     222  if (fgp) {
     223    cout << " --- Test effectue avec FFTPack " << endl;
     224    for(int kk=0; kk<nloop; kk++) {
     225      in = incopie;
     226      //      fftp.FFTForward(in, outc);
     227      fftp.fftf(sz, in.Data());
     228    }
     229  }
     230  else {
     231    cout << " --- Test effectue avec FFTMayer " << endl;
     232    for(int kk=0; kk<nloop; kk++) {
     233      in = incopie;
     234      //      in += 0.01;
     235      MayerFFTForw(in.Data(), sz);
     236    }
     237  }
     238  PrtTim("MultiFFT-LoopEnd");
     239  cout << " ----- End ---- MultiFFTTest<T> ----" << endl;
     240  return 0;
     241}
     242
     243
     244
     245//-------------------------------------------------
     246//-------------------------------------------------
     247//-------------------------------------------------
    203248int main(int narg, char* arg[])
    204249{
     
    209254  if (narg < 3) {
    210255    cout << "tfft/ args error - \n  Usage tfft size p/P/M/W [f/d/F/D  PrtLev=0 MaxNPrt=50 diffthr] \n"
     256         << "    OR  tfft size P/M FL/DL/FZ/DZ  [NFFT=10]  \n"
    211257         << " 1D real/complex-FFT test (FFTServer) \n"
    212258         << " size: input vector length \n "
    213259         << " p=FFTPackTest  P=FFTPack, M=FFTMayer, W= FFTWServer \n "
    214260         << " F/f:float, D/d:double F/D:random in_vector (default=D) \n"
    215          << " diffthr : Threshold for diff checks (=10^-6/10^-4 double/float)" << endl;
     261         << "  FL/DL : perform NFFT on a serie of float[size] or double[size] "
     262         << "  FZ/DZ : perform NFFT on a series of complex<float>[size] or complex<double>[size] "
     263         << " diffthr : Threshold for diff checks (=10^-6/10^-4 double/float)"
     264         << endl;
    216265    return(1);
    217266  }
     
    239288  dtyp = toupper(dtyp);
    240289
     290
    241291  FFTServerInterface * ffts;
    242292  if (*arg[2] == 'M')  ffts = fftm.Clone();
    243293  else if (*arg[2] == 'W')  ffts = fftw.Clone();
    244294  else ffts = fftp.Clone();
     295
     296  int nloop = 0;
     297  bool fgpack = true;
     298  if (arg[3][1] == 'L') {  // MultiFFT test
     299    nloop = 10;
     300    if (narg > 4) nloop = atoi(arg[4]);
     301    if (*arg[2] == 'M')  fgpack = false;
     302  }
     303
    245304
    246305  cout << "\n ============================================= \n"
     
    255314      cout << "   ------ Testing FFTServer for double (r_8)----- " << endl;
    256315      if (*arg[2] == 'p') TestFFTPack(ds, sz);
     316      else if (nloop > 0) rc = MultiFFTTest(ds, sz, nloop, fgpack);
    257317      else rc = TestFFTS(ds, *ffts, sz);
    258318    }
     
    260320      cout << "   ------ Testing FFTServer for float (r_4)----- " << endl;
    261321      if (*arg[2] == 'p') TestFFTPack(fs, sz);
     322      else if (nloop > 0) rc = MultiFFTTest(fs, sz, nloop, fgpack);
    262323      else rc = TestFFTS(fs, *ffts, sz);
    263324    }
Note: See TracChangeset for help on using the changeset viewer.