Matlab parfor和矢量化用于在同一矩阵中进行分配

时间:2017-03-07 00:56:27

标签: matlab vectorization parfor

我对同一样本MATLAB代码有两个问题:

for i = 1:N
 for j = 1:4
  M(CONNECT(e(i),j)) = M(CONNECT(e(i),j))+p(i)*N(i,j);  
 end
end
  1. 为什么我不能直接使用parfor作为(i)的第一个因为每个我独立处理M的单个条目?
  2. 这个简单的代码可以进行矢量化,因为M矩阵用于assign(=)的两个部分吗?
  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

parfor限制了您允许用于输出变量的索引形式。即使您可能独立地运行M元素,parfor基础架构也需要能够提前证明发生了什么。因此,对切片输出变量的限制基本上是必须在i的索引列表中直接使用循环变量M。更多详细信息,请参阅文档here

我将假设CONNECT或者是另一个变量,或者是一个简单的函数 - 在这种情况下,你最好的选择是追求矢量化。这个代码是否可以被矢量化取决于你没有向我们展示的细节 - 即我们需要一个最小的工作示例。 parfor通常仅在循环体中的计算量大于运行循环时必须传输的数据量时才有用。