comparison constant-q-cpp/src/ext/kissfft/test/benchkiss.c @ 366:5d0a2ebb4d17

Bring dependent libraries in to repo
author Chris Cannam
date Fri, 24 Jun 2016 14:47:45 +0100
parents
children
comparison
equal deleted inserted replaced
365:112766f4c34b 366:5d0a2ebb4d17
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/times.h>
4 #include <unistd.h>
5 #include "kiss_fft.h"
6 #include "kiss_fftr.h"
7 #include "kiss_fftnd.h"
8 #include "kiss_fftndr.h"
9
10 #include "pstats.h"
11
12 static
13 int getdims(int * dims, char * arg)
14 {
15 char *s;
16 int ndims=0;
17 while ( (s=strtok( arg , ",") ) ) {
18 dims[ndims++] = atoi(s);
19 //printf("%s=%d\n",s,dims[ndims-1]);
20 arg=NULL;
21 }
22 return ndims;
23 }
24
25 int main(int argc,char ** argv)
26 {
27 int k;
28 int nfft[32];
29 int ndims = 1;
30 int isinverse=0;
31 int numffts=1000,i;
32 kiss_fft_cpx * buf;
33 kiss_fft_cpx * bufout;
34 int real = 0;
35
36 nfft[0] = 1024;// default
37
38 while (1) {
39 int c = getopt (argc, argv, "n:ix:r");
40 if (c == -1)
41 break;
42 switch (c) {
43 case 'r':
44 real = 1;
45 break;
46 case 'n':
47 ndims = getdims(nfft, optarg );
48 if (nfft[0] != kiss_fft_next_fast_size(nfft[0]) ) {
49 int ng = kiss_fft_next_fast_size(nfft[0]);
50 fprintf(stderr,"warning: %d might be a better choice for speed than %d\n",ng,nfft[0]);
51 }
52 break;
53 case 'x':
54 numffts = atoi (optarg);
55 break;
56 case 'i':
57 isinverse = 1;
58 break;
59 }
60 }
61 int nbytes = sizeof(kiss_fft_cpx);
62 for (k=0;k<ndims;++k)
63 nbytes *= nfft[k];
64
65 #ifdef USE_SIMD
66 numffts /= 4;
67 fprintf(stderr,"since SIMD implementation does 4 ffts at a time, numffts is being reduced to %d\n",numffts);
68 #endif
69
70 buf=(kiss_fft_cpx*)KISS_FFT_MALLOC(nbytes);
71 bufout=(kiss_fft_cpx*)KISS_FFT_MALLOC(nbytes);
72 memset(buf,0,nbytes);
73
74 pstats_init();
75
76 if (ndims==1) {
77 if (real) {
78 kiss_fftr_cfg st = kiss_fftr_alloc( nfft[0] ,isinverse ,0,0);
79 if (isinverse)
80 for (i=0;i<numffts;++i)
81 kiss_fftri( st ,(kiss_fft_cpx*)buf,(kiss_fft_scalar*)bufout );
82 else
83 for (i=0;i<numffts;++i)
84 kiss_fftr( st ,(kiss_fft_scalar*)buf,(kiss_fft_cpx*)bufout );
85 free(st);
86 }else{
87 kiss_fft_cfg st = kiss_fft_alloc( nfft[0] ,isinverse ,0,0);
88 for (i=0;i<numffts;++i)
89 kiss_fft( st ,buf,bufout );
90 free(st);
91 }
92 }else{
93 if (real) {
94 kiss_fftndr_cfg st = kiss_fftndr_alloc( nfft,ndims ,isinverse ,0,0);
95 if (isinverse)
96 for (i=0;i<numffts;++i)
97 kiss_fftndri( st ,(kiss_fft_cpx*)buf,(kiss_fft_scalar*)bufout );
98 else
99 for (i=0;i<numffts;++i)
100 kiss_fftndr( st ,(kiss_fft_scalar*)buf,(kiss_fft_cpx*)bufout );
101 free(st);
102 }else{
103 kiss_fftnd_cfg st= kiss_fftnd_alloc(nfft,ndims,isinverse ,0,0);
104 for (i=0;i<numffts;++i)
105 kiss_fftnd( st ,buf,bufout );
106 free(st);
107 }
108 }
109
110 free(buf); free(bufout);
111
112 fprintf(stderr,"KISS\tnfft=");
113 for (k=0;k<ndims;++k)
114 fprintf(stderr, "%d,",nfft[k]);
115 fprintf(stderr,"\tnumffts=%d\n" ,numffts);
116 pstats_report();
117
118 kiss_fft_cleanup();
119
120 return 0;
121 }
122