Matlab多核并行计算parfor的那些事儿【注意事项】

 这几天因为实验需求,所以就了解并尝试用了matlab的多核并行计算方法,主要是通过parfor的形式来实现。现在将笔记mark down并share给大家。希望有所帮助。如有错误,欢迎批评指正。

 

什么是parfor?

parfor是parallel for的缩写,是matlab实现多核并行计算的一种方式。它根据你自身电脑的配置,使得你能够在多个进程(workers)上同时运行matlab程序,(进程的数量 = CPU核心的数量。也就是,如果你的电脑是4核的,那么你的matlab可以同时在4个worker上运行),最终实现减少耗时的目的。

但是,要用它,可不是随便就可以乱用的。人家是有条件的。

 

parfor适用条件?

下面简单说说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]。

 

parfor注意事项?

  • matlab默认是不能在parfor里面使用save函数的。因为matlab不知道要把工作区的哪个变量保存到内存中。但是有时候,你的实验里确实需要保存中间的结果,那么matlab还是有解决方案的:1)你可以将需要保存文件的操作放进另一个函数里进行操作,然后再当前的parfor循环体内调用这个函数parsave[1, 2](链接中有具体的代码参考)。2)你也可以不用save的操作,在需要保存的数据后断点,然后自己实现保存操作。
  • 用parfor循环的下标必须为连续的递增整数

 

parfor使用方法?

简单步骤如下:

1.点击matlab最底下左边的正三角标号,选择“start parallel pool”(当然用其他方式开启也可以);

2.将符合条件的循环for改成parfor即可开始并行运算。

 

References 

[1]  http://www.xiongfuli.com/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/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 

MATLAB中进行并行计算可以显著加速计算过程。MATLAB提供了几种方法来实现并行计算,其中包括使用Parallel Computing Toolbox和使用内置的并行功能。 1. 使用Parallel Computing Toolbox:Parallel Computing Toolbox是MATLAB中用于并行计算的一种工具箱。它可以利用多核CPU、集群和云计算资源来加速计算。通过使用该工具箱,您可以使用以下方法进行并行计算: - 使用parfor循环:parfor循环是一种并行化的for循环,它可以自动将循环迭代分配给多个工作进程,以加速计算。parfor循环的语法与标准的for循环类似,但是可以在循环体内并行执行迭代。 - 使用spmd块:spmd(single program, multiple data)块是一种在多个工作进程上同时执行相同代码的机制。您可以在spmd块内编写并行化的代码段,并利用多个工作进程进行计算。 - 使用parfeval函数:parfeval函数用于将函数调用发送到并行工作进程进行计算。它允许您将计算任务分配给多个工作进程,并在后台进行计算。 2. 使用内置的并行功能:除了Parallel Computing Toolbox,MATLAB还提供了一些内置的函数和语法来实现简单的并行计算。 - 使用parfor语法:与Parallel Computing Toolbox中的parfor循环类似,MATLAB还提供了一种简化的parfor语法,允许您使用多个工作进程并行执行for循环迭代。这种语法适用于一些简单的并行计算任务。 - 使用spmd语法:与Parallel Computing Toolbox中的spmd块类似,MATLAB还提供了一种简化的spmd语法,允许您在多个工作进程上同时执行相同的代码段。 无论您选择使用Parallel Computing Toolbox还是内置的并行功能,都需要确保您的计算机硬件支持并行计算。此外,您还可以使用matlabpool函数来指定使用的工作进程数,以控制并行计算的规模。 请注意,并行计算在处理大规模数据和计算密集型任务时效果最好。对于小规模问题,可能不会看到明显的性能改进。因此,在选择并行计算方法时,请考虑问题的规模和复杂性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值