我有一个关于在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
”?
答案 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
循环内外的使用方式。