annotate ext/kissfft/test/benchkiss.c @ 206:335be766a54d

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