papiclock.m

来自「快速傅立叶变换方法实现快速卷积」· M 代码 · 共 142 行

M
142
字号
clc;clear;close all;
% Simple script that uses PAPI FOR MATLAB to determine the flops of FFT for
% real vectors, FFT for complex vectors, IFFT for complex vectors
%

% FFT and IFFT flops
%--------------------------------------------------------------------------
Lmax    = 2048;
Lmin    = 1;

volte   = 5;

FFTrv   = zeros(Lmax,volte);
FFTiv   = zeros(Lmax,volte);
IFFTiv  = zeros(Lmax,volte);

for L=Lmin:Lmax
    disp('Current length');
    disp(L);
    % vectors initialization
    a = rand(L,1);
    b = rand(L,1)+i*rand(L,1);

    for ii=1:volte
        % FFT real vector
        flops(0);
        fft(a);
        ops           = flops;
        FFTrv(L,ii)   = ops;
    end
    for ii=1:volte
        % FFT complex vector
        flops(0);
        fft(b);
        ops           = flops;
        FFTiv(L,ii)   = ops;
    end
    for ii=1:volte
        % IFFT complex vector
        flops(0);
        ifft(b);
        ops           = flops;
        IFFTiv(L,ii)  = ops;
    end
end
% Flops of complex sum and product
%--------------------------------------------------------------------------
dimx = 100;
dimy = 100;
a    = rand(dimx,dimy)+i*rand(dimx,dimy);
b    = rand(dimx,dimy)+i*rand(dimx,dimy);

flops(0);
a.*b;
ops               = flops;
complexproductops = ops/(dimx*dimy);


flops(0);
a+b;
ops               = flops;
complexsumops     = ops/(dimx*dimy);
% Some other tests
%--------------------------------------------------------------------------
L1           = 500;
a1           = rand(L1,1);
b1           = rand(L1,1)+i*rand(L1,1);
L2           = 800;
a2           = rand(L2,1);
b2           = rand(L2,1)+i*rand(L2,1);

myvector     = zeros(200,1);

ii=1;
% fft di reale con altri
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(a1);ops=flops;myvector(ii)=ops;ii=ii+1;
% fft di complesso con altri
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);fft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
% ifft di complesso con altri
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b2);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
flops(0);ifft(b1);ops=flops;myvector(ii)=ops;ii=ii+1;
%--------------------------------------------------------------------------
save papifftexecutiontimes FFTrv FFTiv IFFTiv complexproductops complexsumops myvector

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?