【问题标题】:MATLAB: how to divide and distribute a list of cell arrays over workers in a parallel loop?MATLAB:如何在并行循环中将单元数组列表分配给工作人员?
【发布时间】:2017-10-25 08:32:03
【问题描述】:

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

假设我有一个元胞数组:

A = { A1, ..., A10}

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

我现在有这个代码;

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

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

【问题讨论】:

标签: matlab parallel-processing


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。是否可以手动检查我的变量是否分开?
  • @Koen:我不知道有什么方法可以确认切片变量实际上是切片变量。也许您可以在 parfor 循环之前和期间致电 memory 以确认您没有遇到意外的内存峰值(即复制而不是分发)?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多