Массивы ячеек в MATLAB с использованием parfor

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

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. Как мне изменить свой сценарий?


person user31720151049edt    schedule 19.06.2015    source источник


Ответы (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
person rlbond    schedule 19.06.2015