2015-06-19 116 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