您的位置:首页 > 编程语言 > MATLAB

MATLAB里面的parfor使用方法

2018-01-01 22:52 3039 查看
HPC即高性能算法(high performance computing),是计算机科学的一个分支,研究并行算法并开发相关软件,致力于开发高性能计算机!MATLAB作为工程界数值计算的主流工具,自MATLAB 2009就已经推出了并行算法工具箱!

1:在使用parfor之前,我们需要开启并行池,在PCT里面,parpool函数提供了并行池的开启和配置。

(1):parpool的开启方法:

 


(2):parpool的配置方法:

我们可以在开启parpool的同时指定一个并行池对象,通过这个对象我们可以知道当前并行池的属性,并且通过这个对象设置并行池的属性。

比如,我们令va=parpool(4),在命令行窗口输入va运行可以得到(这图大的有点不协调呀):



其中几个大家主要关心的参数是,NumWorkers代表池的数量,IdleTimeout代表池存在的时长,SpmdEnabled代表池是否可以运行spmd代码。然后我们可以通过va.property来设置池对应的属性。

另外,如果我们在开启并行池的时候忘记指定池对象了,我们可以通过gcp函数获取当前的池对象,比如:va=gcp。

(3):parpool的关闭:

方法一:等待MATLAB自动关闭池;方法二:关闭 MATLAB(简单暴力);方法三:使用delete函数,syntax:delete(parpoolobjection)。

但是我们启动并行池是需要一定时间的,所以......

2:parfor的使用方法:







parfor循环和平时用的for循环是类似的,但是呢,它和 for 又有些不同的地方,我们运行下面的两种算法:

 parfor算法:                                                          运行结果:


         


for 算法:                                                               运行结果:


   

         

(在这里,我没有写开启并行池的代码,系统可以按默认配置自动开启,我的计算机是四核的,所以NumWorkers=4!但是一个优秀的码农应该在使用前 parpool开启并行池,使用后delete关闭并行池。很明显,我不是

。)

我们看到两种循环语句运行的结果是不一样的,parfor是不能保证迭代是按顺序进行的!

(1):parfor的使用场合:

上面的例子是一个迭代次数少的循环过程,体现不出parfor优势,而且 parfor在运行时还涉及底层的通信,因此在这种时候使用 parfor可能还会得不偿失。 但是当进行蒙特卡洛模拟这些冗长的算法的时候,parfor就可以体现自己的优势了。 parfor 的使用限制包括:1:不可以在 parfor循环里面再次使用 parfor;2:每个迭代都必须独立于其他迭代。(我的理解就是工头给每个工人分配任务,工人的数量就是NumWorkers,工头对每个工人都是公正的,所以分配任务parfor的时候每个工人领到的任务是随机的。每个工人只和工头交流,工人和工人没有交流,这就意味着每个工人领到的任务都是可以自己独立完成的。工人是最低的层次,他们下面没有其他的阶级,这就意味着工人只能接受工头的任务,但不能再分配parfor自己已经得到的任务!)

(2):嵌套循环的parfor写法:

for循环里面可以嵌套for循环,但是parfor循环里面不可以嵌套 parfor循环,这是for和 parfor的又一不同之处。用 parfor改写嵌套循环有三种方法:


方法一:

方法二:


但是吧,这两种方法都不能把parfor的作用发挥的淋漓尽致,于是乎,有了第三种方法:




但是有时候我们在做嵌套循环的时候,会涉及二维数组的处理,用第三种方法得到的ij通过双下标的方式来访问二维数组就会报错,这个时候是有另外一种解决办法的!

(3):parfor里面的变量:

parfor里面一共有五种变量,分别是loop,sliced,broadcast,reduction和temporary,当一个parfor循环里面的变量不能被划分到其中一种的时候,就会出错!在这里,先呈上各个变量的英语解释!


loop是循环变量,应该挺好理解的;broadcast变量是在循环之前定义的变量,在循环中只取值,并不指定新的值;temporary变量是在循环中定义的变量,有且仅在循环中有效,在循环之外无效,还有一点就是它并不影响循环之前定义的同名变量;sliced变量,有人管它叫切片变量(个人感觉这个名字怪怪的),在很多时候是指数组了。reduction变量是一个最后的结果和运算顺序无关的量,它的产生涉及到简约运算符和一定的规则,然后笔者才疏学浅,就不介绍了,哈哈哈!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐