Я новичок в MATLAB, и я просто пытаюсь выполнить параллельную небольшую программу, но проблема в том, что параллельное выполнение занимает больше времени, чем серийный?Параллельное выполнение в MATLAB
close all
clear all
clc
a= rand(1e6,1);
b= rand(1e6,1);
c= zeros(size(a));
d= ones(size(c));
e= zeros(size(d));
tic
tstart=tic;
for i=1:length(a)
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_normal_for=toc(tstart)
tstart=tic;
parfor i=1:length(a)
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_parfor=toc(tstart)
***************************************
t_normal_for =
0.3860
t_parfor =
2.8403
Может кто-нибудь помочь! На самом деле у меня на моем компьютере 4 сотрудника, а версия MATLAB - R2014a. Другой вопрос, пожалуйста, могу ли я отправить одну и ту же функцию каждому работнику на моем компьютере?
Спасибо заранее Аммар
где вы открываете свой параллельный бассейн? Открытие одного занимает около 2 секунд, и если это включено в парфорумент времени, я не удивляюсь, что это занимает больше времени. – Adriaan
Я только что запустил тот же код, и он дает мне те же результаты, а также когда я открываю свой параллельный пул перед выполнением кода. Возможно, что массивы a и b сначала отправляются всем работникам, тем самым повторяя ваши данные четыре раза, затем выполняется операция, тогда массивы c, d и e должны быть собраны для вашего клиента. Накладные расходы довольно большие. – Adriaan