2015-06-19 3 views
0

Мне нужно распараллелить скрипт в MATLAB. У меня есть массив ячеек, к которому я возвращаю значения. Но MATLAB не соглашается с тем, как я структурирую распараллеливание моего скрипта.Ячеистые массивы в MATLAB с использованием parfor

N_h = 4; 
N_r = 6; 
N_s = 20; 

P{1:N_h, 1} = zeros(N_s, N_r); 

workers = 4;        % number of cores (workers) for parallel computing 
multicore = parpool('local', workers);  % open multiple workers (cores) for parallel computation 

for h = 1:1:N_h 
    for r = 1:1:N_r 
     parfor s = 1:N_s 
      P{h,1}(s,r) = some function ... 
     end 
    end 
end 

delete(multicore);      % delete multiple workers (cores) opened for parallel computation 

MATLAB отвечает, что переменная P индексируется таким образом, что несовместимо с parfor. Как мне изменить свой сценарий?

ответ

1

Самый простой способ сделать это - создать временный вектор, сохранить там параллельные результаты и затем присвоить значения сразу.

for h = 1:1:N_h 
    for r = 1:1:N_r 
     svec = zeros(N_s, 1); 
     parfor s = 1:N_s 
      svec(s) = my_very_parallelizable_func(param1, param2); 
     end 
     P{h,1}(:,r) = svec; 
    end 
end 
Смежные вопросы