Mercurial > hg > silvet
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 |