annotate ext/kissfft/test/benchfftw.c @ 409:1f1999b0f577

Bring in kissfft into this repo (formerly a subrepo, but the remote is not responding)
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 21 Jul 2015 07:34:15 +0100
parents
children
rev   line source
c@409 1 #include <stdio.h>
c@409 2 #include <stdlib.h>
c@409 3 #include <fftw3.h>
c@409 4 #include <unistd.h>
c@409 5 #include "pstats.h"
c@409 6
c@409 7 #ifdef DATATYPEdouble
c@409 8
c@409 9 #define CPXTYPE fftw_complex
c@409 10 #define PLAN fftw_plan
c@409 11 #define FFTMALLOC fftw_malloc
c@409 12 #define MAKEPLAN fftw_plan_dft_1d
c@409 13 #define DOFFT fftw_execute
c@409 14 #define DESTROYPLAN fftw_destroy_plan
c@409 15 #define FFTFREE fftw_free
c@409 16
c@409 17 #elif defined(DATATYPEfloat)
c@409 18
c@409 19 #define CPXTYPE fftwf_complex
c@409 20 #define PLAN fftwf_plan
c@409 21 #define FFTMALLOC fftwf_malloc
c@409 22 #define MAKEPLAN fftwf_plan_dft_1d
c@409 23 #define DOFFT fftwf_execute
c@409 24 #define DESTROYPLAN fftwf_destroy_plan
c@409 25 #define FFTFREE fftwf_free
c@409 26
c@409 27 #endif
c@409 28
c@409 29 #ifndef CPXTYPE
c@409 30 int main(void)
c@409 31 {
c@409 32 fprintf(stderr,"Datatype not available in FFTW\n" );
c@409 33 return 0;
c@409 34 }
c@409 35 #else
c@409 36 int main(int argc,char ** argv)
c@409 37 {
c@409 38 int nfft=1024;
c@409 39 int isinverse=0;
c@409 40 int numffts=1000,i;
c@409 41
c@409 42 CPXTYPE * in=NULL;
c@409 43 CPXTYPE * out=NULL;
c@409 44 PLAN p;
c@409 45
c@409 46 pstats_init();
c@409 47
c@409 48 while (1) {
c@409 49 int c = getopt (argc, argv, "n:ix:h");
c@409 50 if (c == -1)
c@409 51 break;
c@409 52 switch (c) {
c@409 53 case 'n':
c@409 54 nfft = atoi (optarg);
c@409 55 break;
c@409 56 case 'x':
c@409 57 numffts = atoi (optarg);
c@409 58 break;
c@409 59 case 'i':
c@409 60 isinverse = 1;
c@409 61 break;
c@409 62 case 'h':
c@409 63 case '?':
c@409 64 default:
c@409 65 fprintf(stderr,"options:\n-n N: complex fft length\n-i: inverse\n-x N: number of ffts to compute\n"
c@409 66 "");
c@409 67 }
c@409 68 }
c@409 69
c@409 70 in=FFTMALLOC(sizeof(CPXTYPE) * nfft);
c@409 71 out=FFTMALLOC(sizeof(CPXTYPE) * nfft);
c@409 72 for (i=0;i<nfft;++i ) {
c@409 73 in[i][0] = rand() - RAND_MAX/2;
c@409 74 in[i][1] = rand() - RAND_MAX/2;
c@409 75 }
c@409 76
c@409 77 if ( isinverse )
c@409 78 p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
c@409 79 else
c@409 80 p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
c@409 81
c@409 82 for (i=0;i<numffts;++i)
c@409 83 DOFFT(p);
c@409 84
c@409 85 DESTROYPLAN(p);
c@409 86
c@409 87 FFTFREE(in); FFTFREE(out);
c@409 88
c@409 89 fprintf(stderr,"fftw\tnfft=%d\tnumffts=%d\n", nfft,numffts);
c@409 90 pstats_report();
c@409 91
c@409 92 return 0;
c@409 93 }
c@409 94 #endif