int main(int argc,char ** argv) { int nfft=1024; int isinverse=0; int numffts=1000,i; CPXTYPE * in=NULL; CPXTYPE * out=NULL; PLAN p; pstats_init(); while (1) { int c = getopt (argc, argv, "n:ix:h"); if (c == -1) break; switch (c) { case 'n': nfft = atoi (optarg); break; case 'x': numffts = atoi (optarg); break; case 'i': isinverse = 1; break; case 'h': case '?': default: fprintf(stderr,"options:\n-n N: complex fft length\n-i: inverse\n-x N: number of ffts to compute\n" ""); } } in=FFTMALLOC(sizeof(CPXTYPE) * nfft); out=FFTMALLOC(sizeof(CPXTYPE) * nfft); for (i=0;i<nfft;++i ) { in[i][0] = rand() - RAND_MAX/2; in[i][1] = rand() - RAND_MAX/2; } if ( isinverse ) p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE); else p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE); for (i=0;i<numffts;++i) DOFFT(p); DESTROYPLAN(p); FFTFREE(in); FFTFREE(out); fprintf(stderr,"fftw\tnfft=%d\tnumffts=%d\n", nfft,numffts); pstats_report(); return 0; }
int main(int argc, char ** argv) { int k; int nfft[32]; int ndims = 1; int isinverse = 0; int numffts = 1000, i; kiss_fft_cpx * buf; kiss_fft_cpx * bufout; int real = 0; nfft[0] = 1024;// default while (1) { int c = getopt(argc, argv, "n:ix:r"); if (c == -1) break; switch (c) { case 'r': real = 1; break; case 'n': ndims = getdims(nfft, optarg); if (nfft[0] != kiss_fft_next_fast_size(nfft[0])) { int ng = kiss_fft_next_fast_size(nfft[0]); fprintf(stderr, "warning: %d might be a better choice for speed than %d\n", ng, nfft[0]); } break; case 'x': numffts = atoi(optarg); break; case 'i': isinverse = 1; break; } } int nbytes = sizeof(kiss_fft_cpx); for (k = 0; k < ndims; ++k) nbytes *= nfft[k]; #ifdef USE_SIMD numffts /= 4; fprintf(stderr, "since SIMD implementation does 4 ffts at a time, numffts is being reduced to %d\n", numffts); #endif buf = (kiss_fft_cpx*)KISS_FFT_MALLOC(nbytes); bufout = (kiss_fft_cpx*)KISS_FFT_MALLOC(nbytes); memset(buf, 0, nbytes); pstats_init(); if (ndims == 1) { if (real) { kiss_fftr_cfg st = kiss_fftr_alloc(nfft[0] , isinverse , 0, 0); if (isinverse) for (i = 0; i < numffts; ++i) kiss_fftri(st , (kiss_fft_cpx*)buf, (kiss_fft_scalar*)bufout); else for (i = 0; i < numffts; ++i) kiss_fftr(st , (kiss_fft_scalar*)buf, (kiss_fft_cpx*)bufout); free(st); } else { kiss_fft_cfg st = kiss_fft_alloc(nfft[0] , isinverse , 0, 0); for (i = 0; i < numffts; ++i) kiss_fft(st , buf, bufout); free(st); } } else { if (real) { kiss_fftndr_cfg st = kiss_fftndr_alloc(nfft, ndims , isinverse , 0, 0); if (isinverse) for (i = 0; i < numffts; ++i) kiss_fftndri(st , (kiss_fft_cpx*)buf, (kiss_fft_scalar*)bufout); else for (i = 0; i < numffts; ++i) kiss_fftndr(st , (kiss_fft_scalar*)buf, (kiss_fft_cpx*)bufout); free(st); } else { kiss_fftnd_cfg st = kiss_fftnd_alloc(nfft, ndims, isinverse , 0, 0); for (i = 0; i < numffts; ++i) kiss_fftnd(st , buf, bufout); free(st); } } free(buf); free(bufout); fprintf(stderr, "KISS\tnfft="); for (k = 0; k < ndims; ++k) fprintf(stderr, "%d,", nfft[k]); fprintf(stderr, "\tnumffts=%d\n" , numffts); pstats_report(); kiss_fft_cleanup(); return 0; }