我正在研究格子bolzmann方法,我写了一个matlab代码。 我想并行化代码的某些部分,但我是新手,所以我很感激你的帮助。 我想知道是否可以使用parfor这个部分(碰撞操作符):
for i=1:lx
for j=1:ly
fork=1:9
f(k,i,j)=f(k,i,j) .* (1 - omega) + omega .* feq(k,i,j);
end
end
end
我试图用parfor替换最外面的for循环,但代码似乎更慢。
有什么建议吗?
提前致谢
答案 0 :(得分:2)
你应该可以使用一行代码完成整个操作而不需要循环:
f = f.*(1 - omega) + omega .* feq;
在我的计算机上有2个内核并以:
开头f = rand(9,400,400);
feq = rand(9,400,400);
[lx,ly,lz] = size(f);
omega = rand(1);
你的循环需要0.087933秒,parfor循环需要1.166662秒,这个方法需要0.009388秒。如果可以,请始终对代码进行矢量化。