gpt4 book ai didi

matlab parfor 导致比 for 循环更长的执行时间

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:26 26 4
gpt4 key购买 nike

我有一个 3 维网格,对于网格中的每个点,我想为大量时间步长计算时间相关函数 G(t),然后对每个网格点的 G 函数求和。使用 4 个 for 循环执行时间变得非常长,所以我试图使用 parfor 避免这种情况。

我的部分代码:

for i=1:50
for j=1:50
for k=1:25
x_in=i*dx;
y_in=j*dy;
z_in=k*dz;
%dx,dy, dz are some fixed values
r=sqrt((xx-x_in).^2+(yy-y_in).^2+(zz-z_in).^2);
%xx,yy,zz are 50x50x25 matrices generated from meshgrid
% r is a 3d matrix which produced from a 3 for-loop, for all the points of grid
parfor q=1:100
t=0.5*q;
G(q)=((a*p)/(t.^1.5)).*(exp(-r.^2/(4*a*t)));
% a,p are some fixed values
end
GG(i,j,k)=sum(G(:));
end
end
end

当我使用 parfor 时,执行时间变长了,我不确定为什么会这样。也许我不太熟悉 parfor 循环中的切片变量和索引变量。

我的电脑处理器有 8 个线程和 ram 内存 ddr3 8GB

任何帮助都会很棒。

谢谢

最佳答案

正如在 previous question 中所讨论的那样, parfor 带有开销。因此,使用 parfor 时,太简单的循环会执行得更慢。

在您的情况下,解决方案可能是并行化最外层的循环。

%# preassign GG
GG = zeros(50,50,25);

%# loop over indices into GG
parfor idx = 1:(50*50*25)
[i,j,k] = ind2sub([50 50 25],idx);
x_in=i*dx;
y_in=j*dy;
z_in=k*dz;
%dx,dy, dz are some fixed values

r=sqrt((xx-x_in).^2+(yy-y_in).^2+(zz-z_in).^2);

%xx,yy,zz are 50x50x25 matrices generated from meshgrid
% r is a 3d matrix which produced from a 3 for-loop, for all the points of grid

for q=1:100
t=0.5*q;
G(q)=((a*p)/(t.^1.5)).*(exp(-r.^2/(4*a*t)));
% a,p are some fixed values
end
GG(idx)=sum(G(:));
end

关于matlab parfor 导致比 for 循环更长的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9480794/

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