MATLAB:如何在并行循环中划分和分配工作单元列表?

时间:2017-10-25 08:32:04

标签: matlab parallel-processing

我有一个关于在MATLAB中并行化代码的问题。我使用MATLAB 2017a。

假设我有一个单元格数组:

A = { A1, ..., A10}

并且这些矩阵非常大(大小> 10000)。现在我想开始在并行池中操作这些矩阵。事实上,第一名工作人员只需要 A1 ,第二名工作人员只需要 A2 等等。

我现在有了这段代码;

parfor i = 1:10
    matrix = A{i};
    blabla = manipulate(Ai);
    save(blabla);
end

我认为MATLAB为每个工作者提供A中的所有矩阵,但这并不是真的需要。有没有办法说:
“给第i个工人矩阵 Ai ”?

2 个答案:

答案 0 :(得分:0)

你想要spmd块。这样,您可以显式处理并行数据的切片,而不是让Matlab使用parfor块自动执行此操作。

parpool('myprofile',10)
spmd
   i = labindex; 
   B = foo(A{i});
end
for i = 1:10
   bar(B{i});
end

答案 1 :(得分:0)

基于the documentation for variables in parfor loops,特别是sliced variables,您的示例中的单元格数组A似乎符合默认情况下被视为切片变量的条件。你不应该做任何特别的事情。您可能需要确认是否符合所有listed criteria,并查看每个变量,了解它们在parfor循环内外的使用方式。