【发布时间】:2013-04-05 00:46:01
【问题描述】:
我正在研究 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 循环,但代码似乎更慢。
有什么建议吗?
提前致谢
【问题讨论】:
-
lx和ly的值是多少?我可以想象当 for 循环不是那么大时 parfor 实际上会由于开销而变慢 -
代码中的 lx 和 ly 设置为 400。我尝试使用更高的值,但迭代时间越来越长。
-
我刚刚对它进行了 1000x1000 的测试,
parfor仍然较慢,但相对更接近for。我注意到,parfor完全用这个循环淹没了我的记忆,可能是因为它传递了大矩阵。也许这就是问题所在?! -
这很奇怪,因为替换最外面的 for 循环并使用 lx=ly=1000 运行算法需要 33 秒而不是 for 循环的 0.4 秒!此外,您对内存使用情况是正确的。
-
快速检查一下:您确实启动了具有多个可用处理器的 matlabpool,对吗?否则使用 parfor 不会做任何有用的事情。
标签: matlab parallel-processing parfor