在稀疏设置中使用parfor

4个视图(过去30天)
雅各布·西弗斯
雅各布·西弗斯 2019年11月23日
你好
我一直在使用parfor循环解决一个问题。但是我注意到,有时实际上不必运行大量的串行条目,我怀疑这会降低parfor循环相对于普通for循环的优势,无论何时它必须处理大量“非条目”.作为一个例子,这里是一个需要解决的假设情况和过程的说明。
=(1; 2; 3; 4、南南,南,南,南;10;11);
B=nan(尺寸(A));
帕弗ii=1:长度(A)
如果~isnan(A(ii))
B(ii)=A(ii);%的过程
终止
终止
如您所见,11个条目中有5个不需要运行,因此parfor相应地跳过了这些条目(对于实际情况,比率通常更像1/10,这就是为什么我正在探索替代解决方案)。但是,我想探索一种快速解决方案,使parfor循环本质上只计算实际条目。我的问题代码如下所示:金宝搏官方网站
=(1; 2; 3; 4、南南,南,南,南;10;11);
B=nan(尺寸(A));
第九=找到(~ isnan (A));
帕弗ii2=1:长度(ix)
ii=ix(ii2);
B(ii)=A(ii);%的过程
终止
Matlab不允许这样做。老兵可能会看到这一点,然后说“显然这是不可能的”,但我不明白为什么,更重要的是,我不明白我如何才能做出类似的作品 简单的 解决方法(即:不重建整个系统) 真实的 在parfor循环中处理),它只会计算正确的数字。
有人能帮我吗?
提前谢谢!
干杯
雅各布
3评论
1月
1月 2019年11月23日
@雅各布:谢谢分享错误信息。如果没有在家里安装并行计算工具箱,我无法复制、粘贴和运行代码。

登录以发表评论。

公认的答案

1月
1月 2019年11月23日
编辑:1月 2019年11月23日
帮助页面“parfor-Loops中的故障排除变量”解释了这个问题:
=(1; 2; 3; 4、南南,南,南,南;10;11);
B=nan(尺寸(A));
ix=查找(~isnan(A));
帕弗ii2 = 1:长度(第九)
2 =第九(ii2);
B(ii)=A(ii);%问题:B的用法不清楚
终止
Matlab无法知道 二, 是唯一的,所以有可能2个工人访问 B(1) 同时
解决方案:
=(1; 2; 3; 4、南南,南,南,南;10;11);
B=nan(尺寸(A));
ix=查找(~isnan(A));
BB = nan(numel(ix), 1);
帕弗ii2=1:numel(ix)
2 =第九(ii2);
BB (ii2) = (2);%没问题:不可能发生碰撞
终止
B(ix)=BB
1评论
雅各布·西弗斯
雅各布·西弗斯 2019年11月23日
啊,好的,这是有道理的。而且解决方案似乎很合理。我会试试这个。谢谢你的帮助!

登录以发表评论。

更多答案(0)

下载188bet金宝搏


释放

R2019a

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!