Эффективность функции FFT в MATLAB R2013a

Михаил
11.03.2013 15:38:01

Эффективность функции FFT в MATLAB R2013a

В MATLAB R2013a встроенная функция fft теперь работает быстрее на процессорах, поддерживающих набор инструкций AVX. Давайте проверим? :)

Содержание

Описание тестбенча

Я написал небольшую функцию:

function fft_avx_bench
% FFT on data fr om 1024 to 33554432 samples
N = 2.^(10:25);
L = length(N);
% Number of iterations to average results
numiter = 10;
time_lapse = zeros(numiter,L);
for j = 1:numiter
    for k = 1:L
        a = randn(1,N(k)) + 1i*randn(1,N(k));
        tic;
        A1 = fft(a);
        time_lapse(j,k) = toc;
    end
end
fname = ['fft_avx_bench_res_',ver sion('-release')];
save(fname,'time_lapse','N');
disp(mean(time_lapse));

Эту функцию я запустил в MATLAB R2012b, и в MATLAB R2013a. Часть кода я позаимствовал отсюда: http://www.mathworks.com/matlabcentral/fileexchange/40097-sprint-race-for-fast-butterflies. Функция очень простая. Мы запускаем fft над входными векторами различной длины - от 2^10 до 2^25, причем делаем это 10 раз (чтобы потом усреднить результаты). Мы измеряем время выполнения каждого вызова функции fft (которых всего у нас получается 160: 10 итераций над 16-ью векторами) и сохраняем в файлы.

Далее мы запускаем следующую функцию для того, чтобы построить графики:

function fft_plot_results
res_12b = load('fft_avx_bench_res_2012b');
res_13a = load('fft_avx_bench_res_2013a');
semilogy(log2(res_13a.N),mean(res_13a.time_lapse),'r');
hold on;
semilogy(log2(res_12b.N),mean(res_12b.time_lapse),'g');
legend({'R2013a','R2012b'});
xlabel('Length of data for FFT (log2)');
ylabel('Execution time (sec)');
title('Comparison of FFT execution time in R2013a and R2012b');
figure;
plot(log2(res_12b.N),(mean(res_12b.time_lapse)-mean(res_13a.time_lapse))./mean(res_12b.time_lapse)*100);
xlabel('Length of data for FFT (log2)');
ylabel('Improvement percentage');
title('Positive percentage shows where R2013a is faster than R2012b');

И вот что у нас получается:

fft_plot_results;

Выводы

В зависимости от размера вектора, увеличение эффективности (скорости) функции fft может достигать 40%. По-моему, очень неплохо! А какие результаты получаются у вас?


Просмотров: 3381
Комментариев: 0
Добавить комментарий
    Добавить комментарий