【问题标题】:using parfor in matlab [duplicate]在matlab中使用parfor [重复]
【发布时间】:2017-06-04 22:55:39
【问题描述】:

我想在 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 中的并行 for 循环,“概述”。

有谁知道我怎样才能消除错误?其他有用的信息是 v1 是一个不包含任何重复元素的递增向量。

【问题讨论】:

  • 你试过在parfor之前初始化gaxgay吗?此外,我认为parfor 在这种情况下不会帮助优化您的代码。最好只使用常规的 for 循环。
  • 是的,我在 parfor 之前给了他们价值。 @kedarps
  • 这似乎是一个切片变量索引问题,请参阅here
  • 我知道,阅读链接后,我无法修复它@kedarps
  • 我编辑了这个问题。你知道我该如何解决吗? @kedarps

标签: matlab optimization parfor


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • “换句话说,你必须设计一个合适的并行算法,你可以基于循环变量并行化方法”。问题是如何做到这一点
  • 我的意见是你不能在这里做!
  • 我忘了说,v1 是一个递增的向量,没有任何重复的元素。这种情况下,你知道parfor怎么用吗?
  • 能否通过添加版本 1 来更新问题?
  • 我添加了更多细节。你知道如何解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多