

Matlab 的 parfor 的使用条件
source link: https://zhiqiang.org/coding/matlab-parfor-condition.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Matlab 的 parfor 的使用条件
parfor
适用于
- 大量的简单计算的循环。
- 大量或少量的复杂计算的循环。
不建议在少量的简单计算的循环中使用 parfor ,因为 parfor 本身有计算的损耗。
同时有很多情况不能使用 parfor ,此时 Matlab 会报错。那到底什么情况下可以用什么情况下不能用呢?这需要从 Matlab 的 parfor 循环机制讲起。Matlab 的 parfor 循环内的变量可分为五大类, parfor 对这五类变量有不同的处理方式。如果 Matlab 无法对 parfor 内的某变量进行归类,或者该变量不满足该类别变量的要求,就会导致出错,此时便不能使用 parfor。
具体而言, Matlab 的 parfor 循环内的变量可分为以下五类:
1、Loop 变量,顾名思义无需多解释。一个限制是循环内不能对循环变量再次赋值:
parfor i = 1:n i = i + 1; % not allowed a(i) = i; end
2、Sliced 变量,是指每个循环只访问该变量的特定位置,具体访问位置跟 Loop 变量有关。一个比较简单的理解方式是,循环访问变量的位置必须是「固定」「不重合」的。如果该变量是输出变量(即在循环内被赋值),访问还必须是「连续」的(此时只能是 Loop 变量再加固定的平移量)。该变量不能在循环内动态变换大小。因此有以下的可行以及不可行的情况:
parfor i = 1:n x(i) = a(2*i*i); % allowed; y(i+2) = a(i) + b(i+1); % allowed; c(i+1) = c(i) + 1; % not allowed; z(2*i) = i; % not allowed; a(i) = []; % not allowed; a(end+1) = i; % not allowed end
3、Broadcast 变量,是指外部变量,且在循环内未被重新赋值。
4、Reduction 变量,该变量遍历所有循环,并且跟运行结果无关。Matlab 会自动识别该类变量,并正确输出结果。如下例所示, Matlab 会按正确顺序输出 x2 :
x2 = []; n = 10; parfor i = 1:n x2 = [x2, i]; i, end
有意思的是,上面这段代码里, i 并不一定按照 1 到 10 的顺序输出,但 x2 的结果却必然是 1 到 10。
5、temporary 变量,是指循环内的临时变量,且该变量不会通过 Loop 变量引用(否则该被归类到 Sliced 变量)。
Q. E. D.
Recommend
-
71
在做多线程编程时,有两个场景我们都会遇到: 多线程访问共享资源,需要用到锁; 多线程间的状态同步,这个可用的机制很多,条件变量是广泛使用的一种。 今天我用一个简单的例子来给大家介绍下...
-
33
[译] Go语言如何使用条件编译 2019-07-08 | Go| 1.7k当开发需要依赖底层平台或处理器体系特性的Go包时,提供对应的特定实现是非常有必要的。
-
19
Posix Thread 中已经实现了读写锁 pthread_rwlock_t,这里讲解的是如何通过互斥锁 pthread_mutex_t 和条件变量 pthread_cond_t 实现读写锁,对 iOS 中通过 NSLock 和 NSCondition 来实现读写锁起到一定的参考作用。
-
15
beego的session使用中的一处竞态条件2014-12-02beego的session使用中的一处竞态条件被session的一个bug坑死了,今天几乎一天时间都耗在定位这个bug了。表现形式是,用户被不正常的踢出,或者登陆进去又被踢出。代码是类似be...
-
14
求字符串长度不许使用循环和条件2014-10-31同事在群里发了一道题目:求字符串长度,但不许用任何判断语句、循环语句。据说这个题目还是某个常青藤大学入学的题目。当然方法肯定是多种多样的。这里聊下如果是我解这道题的第一反应。不许...
-
10
如何实现 Matlab 多重 parfor 循环 作者: 张志强 ...
-
18
Using a parfor Loop to Store the HTML of Many Web Pages » Stuart’s MATLAB Videos Previously, I used a parfor loop to make a
-
9
Modifying My Script Indexing to Work with parfor » Stuart’s MATLAB Videos I’m trying to parallelize a script that takes a few hours to run....
-
10
Speeding-Up a Large File Processing Job with Parfor on a Cluster » Stuart’s MATLAB Videos This...
-
10
Switching a parfor to a parfeval » Stuart’s MATLAB Videos I use parfor a lot when processing large amounts of data. It could be on...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK