Matlab 单元阵列并行计算

Matlab 单元阵列并行计算,matlab,matrix,parallel-processing,cell,Matlab,Matrix,Parallel Processing,Cell,A,B,C:大小为100 x 1的单元阵列。 A的每个单元格都是一个矩阵。所有的尺寸都相同。 B和C包含向量 我需要创建一个大小为100 x 1的单元格数组D。串行代码将类似于: for i=1:100 D{i}=my_func(A{i},B{i},C{i}); end 其中,my_func是一个函数,它接受矩阵和向量的输入,生成向量 我想使用parfor(或spmd)来加快速度。但是,A的大小很大,因此我不想向所有工作人员广播A。考虑到my_func需要一些时间,有没有一种方法可以有

A
B
C
:大小为100 x 1的单元阵列。
A
的每个单元格都是一个矩阵。所有的尺寸都相同。
B
C
包含向量

我需要创建一个大小为100 x 1的单元格数组
D
。串行代码将类似于:

for i=1:100
    D{i}=my_func(A{i},B{i},C{i});
end
其中,
my_func
是一个函数,它接受矩阵和向量的输入,生成向量


我想使用
parfor
(或
spmd
)来加快速度。但是,
A
的大小很大,因此我不想向所有工作人员广播
A
。考虑到
my_func
需要一些时间,有没有一种方法可以有效地做到这一点?如果有人能给我举个小例子,我将不胜感激

看起来您的单元阵列都是。这意味着它们不会广播给所有员工,只广播给每个员工需要的那些片段

因此,您可以安全地将
for
替换为
parfor

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

看起来你的细胞阵列都是。这意味着它们不会广播给所有员工,只广播给每个员工需要的那些片段

因此,您可以安全地将
for
替换为
parfor

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

这真的很奇怪,因为像那样使用parfor比串行代码慢得多。我不知道检查,但如果我在3核上运行,我的计算机就完全冻结了。所以我怀疑这些数据是被广播给工人的。谢谢。@Bluesking您使用的是什么版本的MATLAB?如果≥ R2016b,那么你可能想看看我能够检查发送给每个工人的数据量,大约300MB,大约是矩阵a大小的一半。所以看起来没有什么问题。为什么运行时间没有优势?我知道并行池的启动时间很长;每次运行代码时是否打开和关闭池?否。我打开了池。开始计时并运行代码。标准的东西。我在其他4核的计算机上测试。它的最佳功能是匹配串行代码的时间。也许这工作还不够难。谢谢Rody。这真的很奇怪,因为像那样使用parfor要比串行代码慢得多。我不知道检查,但如果我在3核上运行,我的计算机就完全冻结了。所以我怀疑这些数据是被广播给工人的。谢谢。@Bluesking您使用的是什么版本的MATLAB?如果≥ R2016b,那么你可能想看看我能够检查发送给每个工人的数据量,大约300MB,大约是矩阵a大小的一半。所以看起来没有什么问题。为什么运行时间没有优势?我知道并行池的启动时间很长;每次运行代码时是否打开和关闭池?否。我打开了池。开始计时并运行代码。标准的东西。我在其他4核的计算机上测试。它的最佳功能是匹配串行代码的时间。也许这工作还不够难。谢谢你,罗迪。