【发布时间】:2012-11-24 11:09:27
【问题描述】:
您好,这是我第一次想使用 matlab 的并行工具箱。我有这个循环
for y=1:size(pxyvector,1)
if (strcmp(pxyvector{y,1}, emotionword))&&(strcmp(pxyvector{y,2},tweet{x}))
pxyvector{y,3} = pxyvector{y,3} +1;
invector = true;
end
end
我将如何同时进行这项工作 for。我阅读了 matlab 的切片变量部分,但我不明白如何在这里做到这一点。
pxyvector 是一个 100000x3 元胞数组
tweet{x} 是一个字符串
emotionword 也是一个字符串。
invector 是稍后在循环外使用的值。
所以基本上我将 pxyvector 的一行中的第一个值与情感词进行比较,并将pxyvector 的一行中的第二个值与tweet{x} 进行比较。如果他们是一样的。行中的第三个值递增。
在循环期间,相同的值不能增加两次。
这个for循环的问题是我需要改变一个在循环外使用的变量并增加一个值。
一些数据可供使用:http://ojtwist.be/pxyvector.mat(这个 .mat 文件中的变量是 pxyvector2,所以如果你想测试它,请在代码中更改它)
【问题讨论】:
-
那么,当您尝试 parfor 时会出现哪个错误?顺便说一句,您可以拆分 pxyvector 并对不同的工作人员使用 SIMD 方法。
-
pxyvector 以不同的方式进行索引,可能会导致迭代之间的依赖关系。 invector 在 parfor 循环之后使用,但它的值是不确定的。 SIMD 方法在这里如何工作?
-
pxyvector对我来说似乎很好,因为一次只触及一行,即并行计算应该没问题。但是,invector是个问题。将该行更改为invector(y) = true;怎么样?然后它也应该在parfor循环中运行。在循环之后,只需使用invector = any(invector);。 -
您的第二个建议可能是该行的解决方案。但它仍然不会执行,因为“ pxyvector 以不同的方式指示......”错误
-
能否请您稍微更改一下您的代码,以便有相同的情况,但让这里的其他人可以轻松地处理它?
标签: matlab parallel-processing