一、循环的并行性
在主要的程序结构中,循环结构一般是比较耗时的部分。如果可以并行执行循环,那么可以很大程度上提高Matlab程序的执行效率
对于次数确定的循环(for循环),如果循环的‘计数模块’对于单次循环是独立的(计算结果与循环体的执行顺序无关),那么理论上可以将整个循环拆分成几个子循环,然后将子循环的结果合并。
编写Matlab并行程序时,有两种模式。利用Matlab提供的并行计算模块;利用Matlab提供的通用并行程序设计方法。
Matlab提供的并行计算模块,除了parfor和spmd外,还提供了for-drange、pmode、dfeval和dfevalasync等标准并行结构。
二、parfor循环的基本原理
由for关键字表示的循环可以通过parfor关键字进行并行。Matlab遇到parfor关键字时表示循环采用并行方式执行。
parfor关键字并行执行for循环时,会将for循环划分为若果部分,每部分交由不同的worker执行。循环次数能够被worker数量整除时,循环被平均划分;否则某些worker会执行较多的循环次数。
worker是一个逻辑上的概念,指能并行运行代码的Matlab端。对于微机,单个处理器可以运行一个或多个worker。
注意:
1).parfor应用的前提是循环能够分解成互不相关的分段;
2).parfor并行时会占用计算机资源进行必要的数据通信(循环的效率与循环的长度、需要传输的数据量有关)
默认情况下,Matlab只启动一个进程。Matlab执行parfor之前,需要打开并行计算池。
Matlab并行计算池管理若干worker,每个worker都