Экономия времени и памяти с помощью parfor?
Рассматриватьprova.mat
в MATLAB получается следующим образом
for w=1:100
for p=1:9
A{p}=randn(100,1);
end
baseA_.A=A;
eval(['baseA.A' num2str(w) '= baseA_;'])
end
save(sprintf('prova.mat'),'-v7.3', 'baseA')
Чтобы иметь представление о реальных размерах в моих данных,1x9 cell
вA1
состоит из следующих9
массивы:904x5, 913x5, 1722x5, 4136x5, 9180x5, 3174x5, 5970x5, 4455x5, 340068x5
, ДругойAj
Схожий состав.
Рассмотрим следующий код
clear all
load prova
tic
parfor w=1:100
indA=sprintf('A%d', w);
Aarr=baseA.(indA).A;
Boot=[];
for p=1:9
C=randn(100,1).*Aarr{p};
Boot=[Boot; C];
end
D{w}=Boot;
end
toc
Если я бегуparfor
цикл с4
местным рабочим в моем Macbook Pro это занимает 1,2 сек. Заменаparfor
сfor
это занимает 0,01 сек.
С моими фактическими данными разница во времени составляет 31 с против 7 с [создание матрицыC
тоже сложнее].
Если правильно поняли, проблема в том, что компьютер должен отправитьbaseA
каждому местному работнику, и это требует времени и памяти.
Не могли бы вы предложить решение, которое может сделатьparfor
удобнее чемfor
? Я думал, что спасение всех клеток вbaseA
был способ сэкономить время, загрузив один раз в начале, но, возможно, я ошибаюсь.