利用parfor进行并行计算,处理大量简单的计算(图片处理)
我的程序中需要计算图片的特征。
数据库中共有1W张真实图片,每张图片都有其独有的图片Feature,相互之间的计算不存在依赖关系,而且计算较为简单。
但是数据量过大,所以适合用parfor进行并行处理。
使用parfor所需要慎重的几个条件:
1.程序中循环的每次迭代独立,不相互依赖;
2.parfor循环不能嵌套。解释:(两个for循环进行嵌套,是一个双层循环,但是这个双层循环要是用parfor,就不行了。parfor只能用在这个两层循环的任意一层,但是不能两层都写parfor。)
3.不能在parfor里面使用save函数,因为matlab不知道要把工作区中的哪个变量保存在内存中。
4.parfor循环的下标必须是连续的递增整数。
简单的parfor小例子:
% 指定你要开启的线程数量,开启进程池
core = 5;
p = parpool(core);
% 一个用来记录数据的数组
data = zeros(1,5);
% 并行循环
parfor i = 1:50
% 调用你自己编写的某个函数并返回了某个结果a
a = i+1;
data(i) = a;
end
% 关闭进程池
delete(p)