annotate constant-q-cpp/src/ext/kissfft/test/benchkiss.c @ 372:af71cbdab621 tip

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