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

Обсуждение вопросов связанных с параллельными и распределенными вычислениями

Модератор: Admin

IronBird
Пользователь
Сообщения: 89
Зарегистрирован: Вс авг 31, 2008 1:44 pm

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

Сообщение IronBird » Пт окт 12, 2012 1:44 am

Доброго времени суток всем.
Обновил компьютер, теперь 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;

sandy
Эксперт
Сообщения: 5499
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение sandy » Пт окт 12, 2012 8:48 am

У вас слишком простой код внутри цикла. Матричные операции ядра матлаба давно распараллеливаются автоматически, и от версии ОС это не зависит.
С уважением

Александр Сергиенко

IronBird
Пользователь
Сообщения: 89
Зарегистрирован: Вс авг 31, 2008 1:44 pm

Сообщение IronBird » Пт окт 12, 2012 1:32 pm

Да, видимо так.
Спасибо.

AlexVI
Пользователь
Сообщения: 171
Зарегистрирован: Сб май 13, 2006 2:08 am

Сообщение AlexVI » Пт окт 12, 2012 7:14 pm

Когда-то пришел к выводам: что синхронизация распараллеливания и сборки обратно медленнее чем сам исполняемый код т.е. на выходе получал замедленее а не ускорение аналогично испытывал на С++
С Уважением AlexVI

IronBird
Пользователь
Сообщения: 89
Зарегистрирован: Вс авг 31, 2008 1:44 pm

Сообщение IronBird » Сб окт 13, 2012 6:20 pm

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

kathi
Пользователь
Сообщения: 1
Зарегистрирован: Вт ноя 18, 2014 9:52 am

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

Сообщение kathi » Вт ноя 18, 2014 9:59 am

Она была связана с тем, что MATLAB был установлен с MATLAB Distributed Computing Server (т.е. не создались ярлыки и ассоциации с файлами), но запускался интерактивно. В этом случае и выскакивала ошибка.
Download high quality 1z0-060 exam - pass4sure dumps to prepare and pass 156-215.77 - dumps - pass4-sure.net with oracle certification dumps loyola Also get free demos of www.clarku.edu