Страница 1 из 1

Почему parfor ничего не ускоряет

Добавлено: Пт окт 12, 2012 1:44 am
IronBird
Доброго времени суток всем.
Обновил компьютер, теперь 4 ядра, при мультитрединге - 8. Решил разобраться с распараллеливанием, и, вот сразу столкнулся с непонятными моментами.

Запускаю тестовый код, и по времени получается что без распараллеливания работает так же быстро как и с распараллеливанием.
А иногда и быстрее (видимо, за счет исполнения лишних команд matlabpool open matlabpool lose).

В чем ошибка? То ли я что то делаю не так, то ли Вин 7 (раньше работал на ХР) сама раскидывает на все ядра без всяких parfor?

Вот код:

1. Без parfor

clear;
tic;

A=rand(3000,3000);

B=NaN(1000,1);

for i=1:1000
B(i)=sum(sum(sin(A)));
end

toc;



То же самое только с parfor:

clear;
tic;

matlabpool open;

A=rand(3000,3000);

B=NaN(1000,1);

parfor i=1:1000
B(i)=sum(sum(sin(A)));
end

matlabpool close;

toc;

Добавлено: Пт окт 12, 2012 8:48 am
sandy
У вас слишком простой код внутри цикла. Матричные операции ядра матлаба давно распараллеливаются автоматически, и от версии ОС это не зависит.

Добавлено: Пт окт 12, 2012 1:32 pm
IronBird
Да, видимо так.
Спасибо.

Добавлено: Пт окт 12, 2012 7:14 pm
AlexVI
Когда-то пришел к выводам: что синхронизация распараллеливания и сборки обратно медленнее чем сам исполняемый код т.е. на выходе получал замедленее а не ускорение аналогично испытывал на С++

Добавлено: Сб окт 13, 2012 6:20 pm
IronBird
Ну я присобачился сейчас по другому делать. Почти все расчеты ЗАРАНЕЕ выношу в отдельную ф-ию, то есть тело основной программы грубо говоря выглядит как обращение в цикле к этой основной функции, в которой происходят фактически все расчеты - долго и нудно. ТОгда быстро и легко изменить код для распараллеливания, да и выигрыш в скорости вроде есть.

Re: Почему parfor ничего не ускоряет

Добавлено: Вт ноя 18, 2014 9:59 am
kathi
Она была связана с тем, что MATLAB был установлен с MATLAB Distributed Computing Server (т.е. не создались ярлыки и ассоциации с файлами), но запускался интерактивно. В этом случае и выскакивала ошибка.