Fré*_*din 2 parallel-processing matlab for-loop
我正在尝试在matlab并行度包中使用parfor循环.我对这个人有类似的问题:MATLAB parfor切片问题?.输出矩阵似乎不被识别为切片变量.在我的具体情况下,我正在尝试在parfor中堆叠使用其他for循环,并且我无法将其他线程中提出的解决方案应用于我的问题.这是我正在尝试做的一个虚拟示例:
n=175;
matlabpool;
Matred=zeros(n,n);
Matx2Cell = cell(n);
parfor i=1:n
for j=1:n
for k=1:n
Matred(j,k)=exp((j+i+k)/500)
end;
end;
Matx2Cell{i}=Matred;
end;
matlabpool close;
Run Code Online (Sandbox Code Playgroud)
PS我知道它可以将parfor放在k-loop而不是i-loop ......但是我仍然想把它放在i-loop上(我相信它会更节省时间)真实的节目).
非常感谢FrédéricGodin
你可以放入Matred = zeros(n);parfor身体,但这很慢.而是Matred = zeros(n);在其中定义一个函数:实际上是相同的,但更快:
function Matred = calcMatred(i,n)
Matred=zeros(n);
for j=1:n
for k=1:n
Matred(j,k)=exp((j+i+k)/500);
end
end
Run Code Online (Sandbox Code Playgroud)
这是一个时间比较:
matlabpool
n = 175;
Matx2Cell = cell(n,1);
tic
parfor i=1:n
Matred=zeros(n);
for j=1:n
for k=1:n
Matred(j,k)=exp((j+i+k)/500);
end
end
Matx2Cell{i}=Matred;
end
toc
tic
parfor i=1:n
Matx2Cell{i}=calcMatred(i,n);
end
toc
matlabpool close
Run Code Online (Sandbox Code Playgroud)
在我的机器上,第一个需要7秒,第二个需要0.3秒.
另外请注意,我已经改变了申报的Matx2Cell,以cell(n,1)因为cell(n)让一个n x n单元阵列.