gpt4 book ai didi

for-loop - Matlab并行工具箱: stacking loops in parfor

转载 作者:行者123 更新时间:2023-12-02 20:04:26 31 4
gpt4 key购买 nike

我正在尝试使用 matlab 并行包中的 parfor 循环。我和这个人有类似的问题:MATLAB parfor slicing issue? 。输出矩阵似乎没有被识别为切片变量。在我的具体情况下,我试图在 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;

附注我知道将 parfor 放在 k 循环而不是 i 循环上会起作用...但我仍然想将它放在 i 循环上(我相信在我的实际情况中这会更省时)程序)。

非常感谢弗雷德里克·戈丁

最佳答案

您可以将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

这是时间比较:

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

在我的机器上,第一次需要 7 秒,第二次需要 0.3 秒。

另请注意,我已将 Matx2Cell 的声明更改为 cell(n,1),因为 cell(n) 生成 n x n元胞数组。

关于for-loop - Matlab并行工具箱: stacking loops in parfor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098462/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com