这几天因为实验需求,所以就了解并尝试用了matlab的多核并行计算方法,主要是通过parfor的形式来实现。现在将笔记mark down并share给大家。希望有所帮助。如有错误,欢迎批评指正。
parfor是parallel for的缩写,是matlab实现多核并行计算的一种方式。它根据你自身电脑的配置,使得你能够在多个进程(workers)上同时运行matlab程序,(进程的数量 = CPU核心的数量。也就是,如果你的电脑是4核的,那么你的matlab可以同时在4个worker上运行),最终实现减少耗时的目的。
但是,要用它,可不是随便就可以乱用的。人家是有条件的。
下面简单说说parfor在什么情况下用,才是最有效的[3]。
各个worker之间的数据不会互相依赖。也就是说,你第一次迭代输出的数据 与 你第二次迭代输入的数据 没有关系,每一次迭代的运行,都是互相独立的,互不依赖的。或者说,循环内部的变量之间不存在数据传递。适用于 大量简单的计算 or 小量/大量复杂的计算。(实质上是指 那些迭代耗时很长的循环,用parfor效果才明显。)这是因为,parfor循环内部有通信消耗,所以对于小数量的简单计算时,用parfor并行可能耗时会更长。例如: tic; parfor i = 1:1024000 A = sin(i*2*pi/1024); end toc; tic; for i = 1:1024000 A = sin(i*2*pi/1024); end toc;
更多的例子可以看看[4]。
简单步骤如下:
1.点击matlab最底下左边的正三角标号,选择“start parallel pool”(当然用其他方式开启也可以);
2.将符合条件的循环for改成parfor即可开始并行运算。
[1] http://www.xiongfuli.com/并行计算/2016-05/Matlab-Parfor.html
[2] https://ww2.mathworks.cn/matlabcentral/answers/135285-how-do-i-use-save-with-a-parfor-loop-using-parallel-computing-toolbox
[3] http://zhiqiang.org/coding/matlab-parfor-condition.html
[4] https://www.mathworks.com/help/parallel-computing/examples.html?category=getting-started-with-parallel-computing-toolbox&s_tid=CRUX_lftnav_example_index