2017-09-08 27 views
1

ABC:大小为100×1
的单元阵列的A每个小区是一个矩阵。全部具有相同的尺寸。
BC包含载体。与单元阵列并行计算

我需要创建尺寸的单元阵列D 100×1.串行代码看起来是这样的:

for i=1:100 
    D{i}=my_func(A{i},B{i},C{i}); 
end 

其中my_func是一个函数,它的矩阵和矢量的输入,产生载体。

我想用parfor(或spmd)使事情变得更快。但是,A尺寸较大,因此我不想向所有工作人员广播A。考虑到my_func需要一段时间,是否有办法有效地做到这一点?如果有人能给我一个小例子,我会很感激。

回答

0

它看起来像你的单元格阵列都是sliced variables。这意味着他们不会被广播给所有的员工,只有每个员工需要的部分。

因此,你可以安全地更换forparfor

parfor i = 1:100 
    D{i} = my_func(A{i}, B{i}, C{i}); 
end 
+0

然后其真正的奇怪,因为使用PARFOR像比串行代码的方式要慢。我不知道要检查,但如果我运行3个内核,我的电脑完全冻结。所以我怀疑数据正在向工作人员播放。谢谢。 – Bluesking

+0

@Bluesking你在什么版本的MATLAB?如果≥R2016b,那么您可能需要查看[ticBytes](https://nl.mathworks.com/help/distcomp/ticbytes.html) –

+0

我能够检查发送给每个工作人员的数据量,大约300MB,大约是矩阵A的一半。所以看起来没有什么错。运行时间怎么没有优势? – Bluesking