2

我正在研究 lattice boltzmann 方法,并且我已经编写了一个 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 循环,但代码似乎更慢。

有什么建议么?

提前致谢

4

1 回答 1

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 秒。如果可以,请始终矢量化您的代码。

于 2013-04-04T16:46:01.670 回答