% 设置共享文件夹,映射网络驱动器
% set( job, 'PathDependencies', {'Z:\Test'} );
% 另一种方法,把用到的原程序文件传给所有 workers。matlab内循环并行计算
%set( job, 'FileDependencies', {'hp.m', 'hp1.m', 'x.mat', 'y.mat'} );
在创建Job之后,使用createTask函数为该Job创建Task。Task定义了Worker所要执行的函数。在本例中,每个Task将会生成3*3的随机数矩阵。
createTask(job, @rand, 1, {3,3});
createTask(job, @rand, 1, {3,3});
createTask(job, @rand, 1, {3,3});
createTask(job, @rand, 1, {3,3});
createTask(job, @rand, 1, {3,3});
T = createTask(job, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {3,3}});
Matlab client 对parfor关键字的处理,它将任务分配到多个Matlab workers上并行执行程序,假设m为Matlab worker的数量,循环次数为n,若n/m为整数的话,则循环被均匀划分到Matlab worker,否则,循环被非均匀划分,部分Matlab worker的负载会大些。
parfor主要是针对循环进行并行,parfor执行时将循环分解为独立的部分,然后将各个部分并行执行,提高程序的执行效率。MATLAB并行执行parfor循环时,采用client和worker模式,用户可以将matlab理解为一个进程,一台计算机可以运行多个matlab进程。for循环完全顺序执行,而parfor的执行顺序与parfor分段在matlab worker 之间的分配顺序有关,有可能会随机执行。(参考:刘维《实战Matlab之并行程序设计》)
将传统的for循环改为parfor循环,就会将循环体作为整体分到到一个个处理器中,从而一次性进行多组运算。在使用parfor时,代码的编写有一些注意事项,最主要的是其中变量的处理。matlab的帮助文档中有详细的描述。在parfor中,变量不再是随心所欲的使用,有着其自己的分类。在parfor运行时,我们经常会遇到这样的错误“Error: The variable xxx in a parfor cannot be classified.”说的就是变量xxx不能被正常划分到正确的类别中。
2:将串行循环中的for关键字改为parfor,并注意是否修改循环体,以满足特定需求,如循环变量,下标
matlab使用变量的一个好处是不需要预定义。但是在使用parfor时,这会弄混sliced变量和临时变量。由于临时变量不需要有sliced变量的限制,使用更自由,因此一定要区分开。方法是在parfor中对临时变量进行预定义。例
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40306-3.html
才终感知
飞机对敌舰和空中飞行采取驱逐行动形成武力对峙