% NxM is the size of the FFT to test. Note 65536 was chosen as a test % for thrashing of the cache when copying from FFTW's packed format to % a normal matrix. N=[512,513,514,512,65536,1]; M=[512,513,512,514,1,65536]; %N = [128, 129, 130, 128, 8192, 1]; %M = [128, 129, 128, 130, 1, 8192]; rep = 20; savedata = 1; if (exist('OCTAVE_VERSION')) platfrm = ['Octave ' version]; else platfrm = ['Matlab ' version]; end fprintf('Testing %s for real ffts\n\n', platfrm); infft = cell(1,length(N)); resfft = cell(2, length(N)); resfft2 = cell(2, length(N)); timfft = cell(2,length(N)); timfft2 = cell(2,length(N)); for i=1:length(N) a = randn(N(i),M(i)); infft{i} = a; fprintf('Testing fft(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft twice to ensure all variables initialized b = fft(a); b = fft(a); timfft{1,i} = 0; for j=1:rep t = cputime; b = fft(a); timfft{1,i} = timfft{1,i} + cputime - t; end resfft{1,i} = b; timfft{1,i} = timfft{1,i} / rep; fprintf('%5.2e sec\n', timfft{1,i}); fprintf('Testing ifft(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft twice to ensure all variables initialized b = ifft(a); b = ifft(a); timfft{2,i} = 0; for j=1:rep t = cputime; b = ifft(a); timfft{2,i} = timfft{2,i} + cputime - t; end resfft{2,i} = b; timfft{2,i} = timfft{2,i} / rep; fprintf('%5.2e sec\n', timfft{2,i}); fprintf('Testing fft2(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft2 twice to ensure all variables initialized b = fft2(a); b = fft2(a); timfft2{1,i} = 0; for j=1:rep t = cputime; b = fft2(a); timfft2{1,i} = timfft2{1,i} + cputime - t; end resfft2{1,i} = b; timfft2{1,i} = timfft2{1,i} / rep; fprintf('%5.2e sec\n', timfft2{1,i}); fprintf('Testing ifft2(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft2 twice to ensure all variables initialized b = ifft2(a); b = ifft2(a); timfft2{2,i} = 0; for j=1:rep t = cputime; b = ifft2(a); timfft2{2,i} = timfft2{2,i} + cputime - t; end resfft2{2,i} = b; timfft2{2,i} = timfft2{2,i} / rep; fprintf('%5.2e sec\n', timfft2{2,i}); end fprintf('\n\nTesting %s for complex ffts\n\n', platfrm); cinfft = cell(1,length(N)); cresfft = cell(2, length(N)); cresfft2 = cell(2, length(N)); ctimfft = cell(2,length(N)); ctimfft2 = cell(2,length(N)); for i=1:length(N) a = randn(N(i),M(i)) + 1i * randn(N(i),M(i)); cinfft{i} = a; fprintf('Testing fft(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft twice to ensure all variables initialized b = fft(a); b = fft(a); ctimfft{1,i} = 0; for j=1:rep t = cputime; b = fft(a); ctimfft{1,i} = ctimfft{1,i} + cputime - t; end cresfft{1,i} = b; ctimfft{1,i} = ctimfft{1,i} / rep; fprintf('%5.2e sec\n', ctimfft{1,i}); fprintf('Testing fft(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft twice to ensure all variables initialized b = ifft(a); b = ifft(a); ctimfft{2,i} = 0; for j=1:rep t = cputime; b = ifft(a); ctimfft{2,i} = ctimfft{2,i} + cputime - t; end cresfft{2,i} = b; ctimfft{2,i} = ctimfft{2,i} / rep; fprintf('%5.2e sec\n', ctimfft{2,i}); fprintf('Testing fft2(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft2 twice to ensure all variables initialized b = fft2(a); b = fft2(a); ctimfft2{1,i} = 0; for j=1:rep t = cputime; b = fft2(a); ctimfft2{1,i} = ctimfft2{1,i} + cputime - t; end cresfft2{1,i} = b; ctimfft2{1,i} = ctimfft2{1,i} / rep; fprintf('%5.2e sec\n', ctimfft2{1,i}); fprintf('Testing ifft2(%5d,%5d) ', N(i), M(i)); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end % Call fft2 twice to ensure all variables initialized b = ifft2(a); b = ifft2(a); ctimfft2{2,i} = 0; for j=1:rep t = cputime; b = ifft2(a); ctimfft2{2,i} = ctimfft2{2,i} + cputime - t; end cresfft2{2,i} = b; ctimfft2{2,i} = ctimfft2{2,i} / rep; fprintf('%5.2e sec\n', ctimfft2{2,i}); end fprintf('Saving Data '); if (exist('OCTAVE_VERSION')) eval('fflush(stdout);'); end if (savedata) save testfft.mat infft resfft timfft resfft2 timfft2 cinfft cresfft ctimfft cresfft2 ctimfft2 N M platfrm else save testfft.mat timfft timfft2 ctimfft ctimfft2 N M platfrm end fprintf('done\n');