annotate src/ext/kissfft/test/benchkiss.c @ 196:da283326bcd3 tip master

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