交互式地并行运行循环parfor
在这个例子中,你从慢速开始为
-loop,您可以使用parfor
循环。parfor
拆分执行为
-循环迭代并行池中的工作者。
这个例子计算了一个矩阵的谱半径,并转换了一个为
-循环成parfor
循环。了解如何测量结果的加速。
在MATLAB中®编辑器,输入以下内容
为
循环。添加抽搐
而且toc
测量所消耗的时间。Tic n = 200;A = 500;A = 0 (n);为i = 1:n a(i) = max(abs(eig(rand(a))));结束toc
运行脚本,并记录所消耗的时间。
运行时间为31.935373秒。
在脚本中,替换
为
带a的-循环parfor
循环。Tic n = 200;A = 500;A = 0 (n);parfori = 1:n a(i) = max(abs(eig(rand(a))));结束toc
运行新脚本,然后再运行一次。请注意,第一次运行比第二次运行慢,因为并行池需要一些时间来启动并使代码对工作人员可用。注意第二次运行所花费的时间。
默认情况下,MATLAB会自动在本地机器上打开并行工作池。
使用'Processes'配置文件启动并行池(parpool)…连接到4个工人. ...运行时间为10.760068秒。
parfor
在四个工人上运行大约比相应的速度快三倍为
循环运行。提速比理想提速要小,在4个工人上提速是4倍。这是由于并行开销造成的,包括将数据从客户机传输到工作线程并返回所需的时间。这个例子展示了一个相对较小的并行开销的很好的加速,并且从转换为parfor
循环。并不是所有的为
-loop迭代可以转化为更快parfor
循环。要了解更多信息,请参见决定何时使用parfor.
使用的一个关键要求parfor
-loops是单独的迭代必须是独立的。独立问题适用于parfor
处理包括蒙特卡罗模拟和参数扫描。有关后续步骤,请参见将for-Loops转换为parfor-Loops.
在本例中,通过转换为
-循环成parfor
-循环四个工人。您可以通过增加并行池中的工作线程数量来进一步减少运行时间,参见将parfor-Loops扩展到集群和云.
您可以修改集群配置文件,以控制运行循环的worker数量,以及这些worker是本地的还是集群上的。有关概要文件的详细信息,请参见发现集群并使用集群概要文件.
修改并行首选项,以控制是否自动创建并行池,以及在超时前可用多长时间。有关首选项的详细信息,请参见指定你的并行偏好.
你可以运行Simulin金宝appk®模型与之并行parsim
命令,而不是使用parfor
循环。有关并行使用Simulink的更多信息和示例,请参见金宝app运行多个模拟(金宝app模型).