diff --git a/kiss_fft.c b/kiss_fft.c index 9e59602..d5fbf7d 100644 --- a/kiss_fft.c +++ b/kiss_fft.c @@ -278,10 +278,11 @@ void bfly5( Fout4->i = scratch[0].i + scratch[5].i + scratch[6].i + scratch[7].i + scratch[8].i; ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; - tw1+=m; - tw2+=2*m; - tw3+=3*m; - tw4+=4*m; + tw1+=fstride; + tw2+=2*fstride; + tw3+=3*fstride; + tw4+=4*fstride; + } } @@ -347,9 +348,7 @@ void fft_work( case 2: bfly2(Fout,fstride,st,m); break; case 3: bfly3(Fout,fstride,st,m); break; case 4: bfly4(Fout,fstride,st,m); break; -#if 1 case 5: bfly5(Fout,fstride,st,m); break; -#endif default: bfly_generic(Fout,fstride,st,m,p); break; } } diff --git a/test/Makefile b/test/Makefile index b30f455..200735b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,23 +1,17 @@ - ifeq "$(NFFT)" "" - NFFT=1024 + NFFT=1800 endif - ifeq "$(NUMFFTS)" "" NUMFFTS=10000 endif - -UTILSRC=../kiss_fft.c fftutil.c - -CFLAGS=-Wall -O3 -lm -I.. -ansi -pedantic - ifeq "$(DATATYPE)" "" - DATATYPE=float + DATATYPE=float endif + UTIL=fftutil_$(DATATYPE) +BENCH=bm_$(DATATYPE) - -all: $(UTIL) +all: $(UTIL) $(BENCH) ifeq "$(DATATYPE)" "short" TYPEFLAGS=-DFIXED_POINT -Dkiss_fft_scalar=short @@ -25,31 +19,29 @@ else TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE) endif -$(UTIL): $(UTILSRC) - gcc -o $@ $(CFLAGS) $(TYPEFLAGS) $(UTILSRC) +CFLAGS=-Wall -O3 -ansi -pedantic +$(UTIL): ../kiss_fft.c fftutil.c + gcc -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) ../kiss_fft.c fftutil.c -lm -RANDDAT=rand_$(DATATYPE)_$(NFFT).dat -$(RANDDAT): - ./rand_fft_data.py -n 1 -N $(NFFT) -t $(DATATYPE) > $(RANDDAT) +$(BENCH): benchkiss.c ../kiss_fft.c + gcc -o $@ $(CFLAGS) -I.. benchkiss.c $(TYPEFLAGS) ../kiss_fft.c -lm -time: all $(RANDDAT) - @echo - @echo -n "#### timing $(NUMFFTS) x $(NFFT) point FFTs. "; factor $(NFFT) - @if [ -x ~/fftw/st ] && [ $(DATATYPE) == "double" ]; then \ - echo "#### FFTW FFT $(DATATYPE)"; \ - time ~/fftw/st -x $(NUMFFTS) -n $(NFFT) < $(RANDDAT) > /dev/null;\ - fi - @echo "#### KISS FFT $(DATATYPE)" - @time ./$(UTIL) -x $(NUMFFTS) -n $(NFFT) < $(RANDDAT) > /dev/null - @rm $(RANDDAT) +fftw: bm_fftw + ./bm_fftw -x $(NUMFFTS) -n $(NFFT) +bm_fftw: benchfftw.c + gcc -o $@ $(CFLAGS) benchfftw.c -lm -lfftw3 -L /usr/local/lib/ + +time: all + ./$(BENCH) -x $(NUMFFTS) -n $(NFFT) POW2=256 512 1024 2048 POW3=243 729 2187 -POW5=25 125 625 +POW5=25 125 625 + mtime: all - @for n in $(POW5) ;do \ - export NFFT=$$n;make time; \ - done + @for n in $(POW2) $(POW3) $(POW5) ;do \ + ./$(BENCH) -x $(NUMFFTS) -n $$n;\ + done snr: all @which octave @@ -61,5 +53,4 @@ snr: all test: snr time clean: - rm -f *.dat *~ fftutil_* - + rm -f *~ fftutil_* bm_* diff --git a/test/rand_fft_data.py b/test/rand_fft_data.py deleted file mode 100755 index 60e9627..0000000 --- a/test/rand_fft_data.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/local/bin/python2.3 - -import sys -import random -import struct - -def main(): - from getopt import getopt - opts,args = getopt(sys.argv[1:],'n:N:t:l:h:') - opts=dict(opts) - nbufs = int( opts.get('-n','10000') ) - nfft = int( opts.get('-N','1024') ) - type = opts.get('-t','f') - lo = float(opts.get('-l','-32768') ) - hi = float(opts.get('-h','32767') ) - - format = {'float':'f','short':'h','double':'d'}[type] - - nums = [ random.uniform(lo,hi) for i in range(nfft*2) ] - buf = struct.pack( '%d%s' % ( len( nums ) , format ) , *nums ) - - for i in range(nbufs): - sys.stdout.write( buf ) - -if __name__ == '__main__': - main() diff --git a/test/speedtest.c b/test/speedtest.c deleted file mode 100755 index a7af70f..0000000 --- a/test/speedtest.c +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include -#include -#include - - -int main(int argc,char ** argv) -{ - int nfft=1024; - int isinverse=0; - FILE *fin=stdin; - FILE *fout=stdout; - int times=1,i; - - fftw_complex * in=NULL; - fftw_complex * out=NULL; - fftw_plan p; - - while (1) { - int c = getopt (argc, argv, "n:ix:"); - if (c == -1) - break; - switch (c) { - case 'n': - nfft = atoi (optarg); - break; - case 'x': - times = atoi (optarg); - break; - case 'i': - isinverse = 1; - break; - } - } - //fprintf(stderr,"sizeof(fftw_complex) = %d \n" , sizeof(fftw_complex) ); - fprintf(stderr,"sizeof(fftw_complex[0]) = %d \n" , sizeof((*in)[0]) ); - - in=fftw_malloc(sizeof(fftw_complex) * nfft); - out=fftw_malloc(sizeof(fftw_complex) * nfft); - if ( isinverse ) - p = fftw_plan_dft_1d(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE); - else - p = fftw_plan_dft_1d(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE); - - while ( fread( in , sizeof(fftw_complex) , nfft , fin ) > 0 ) { - for (i=0;i $(RANDDAT) +$(BENCH): benchkiss.c ../kiss_fft.c + gcc -o $@ $(CFLAGS) -I.. benchkiss.c $(TYPEFLAGS) ../kiss_fft.c -lm -time: all $(RANDDAT) - @echo - @echo -n "#### timing $(NUMFFTS) x $(NFFT) point FFTs. "; factor $(NFFT) - @if [ -x ~/fftw/st ] && [ $(DATATYPE) == "double" ]; then \ - echo "#### FFTW FFT $(DATATYPE)"; \ - time ~/fftw/st -x $(NUMFFTS) -n $(NFFT) < $(RANDDAT) > /dev/null;\ - fi - @echo "#### KISS FFT $(DATATYPE)" - @time ./$(UTIL) -x $(NUMFFTS) -n $(NFFT) < $(RANDDAT) > /dev/null - @rm $(RANDDAT) +fftw: bm_fftw + ./bm_fftw -x $(NUMFFTS) -n $(NFFT) +bm_fftw: benchfftw.c + gcc -o $@ $(CFLAGS) benchfftw.c -lm -lfftw3 -L /usr/local/lib/ + +time: all + ./$(BENCH) -x $(NUMFFTS) -n $(NFFT) POW2=256 512 1024 2048 POW3=243 729 2187 -POW5=25 125 625 +POW5=25 125 625 + mtime: all - @for n in $(POW5) ;do \ - export NFFT=$$n;make time; \ - done + @for n in $(POW2) $(POW3) $(POW5) ;do \ + ./$(BENCH) -x $(NUMFFTS) -n $$n;\ + done snr: all @which octave @@ -61,5 +53,4 @@ snr: all test: snr time clean: - rm -f *.dat *~ fftutil_* - + rm -f *~ fftutil_* bm_*