在matlab中使用parfor作为格子boltzmann代码

时间:2013-04-04 10:54:28

标签: matlab parallel-processing parfor

我正在研究格子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循环,但代码似乎更慢。

有什么建议吗?

提前致谢

1 个答案:

答案 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秒。如果可以,请始终对代码进行矢量化。