在matlab中使用parfor

时间:2017-06-03 22:00:21

标签: matlab optimization parfor

我想在matlab中并行化部分代码。例如下面的部分:

v1=[1,3,6,8];
ggx=5.*ones(15,14);
gax=ones(15,14);
 parfor i = 1:length(v1)
 m = v1(i);
 if m > 1
 gax(1:m-1,m-1) = ggx(1:m-1,m-1);
 end
 if m<nn
 gax(m+1:end,m) = ggx(m+1:end,m);
 end
 end

但是有一个错误:     错误:parfor中的变量gax无法分类。参见MATLAB中的循环并行,&#34;概述&#34;。

有谁知道如何删除错误?其他有用的信息是v1是一个增加的向量,它不包含任何重复的元素。

1 个答案:

答案 0 :(得分:1)

如错误消息中所述,您必须遵循Sliced Variable rulegaxgay都违反了Fixed Index ListingForm of Indexing的规则。此外,您可以将此示例A(i,20:30,end) % 20:30 not scalar作为文档中未切片变量的示例。

因此,您应该更改parfor的所有部分以获得正确的并行计算。换句话说,您必须设计一个适当的并行算法,您可以根据循环变量并行化该方法。

  

第一级索引的类型 - 索引的第一级是括号,()或大括号,{}。

     

固定索引列表 - 在第一级括号或大括号内,索引列表对于给定变量的所有匹配项都是相同的。

     

索引形式 - 在变量的索引列表中,只有一个索引涉及循环变量。

     

数组的形状 - 数组保持恒定的形状。在分配切片变量时,赋值的右侧不能是[]或'',因为这些运算符会尝试删除元素。