以交互方式并行运行一个循环parfor
在这个例子中,您从一个慢的开始为
-循环,并且使用parfor
循环。parfor
的执行分割。为
-循环迭代并行池中的工人。
这个例子计算一个矩阵的谱半径并转换a为
-loop intoparfor
循环。了解如何度量由此产生的加速。
在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会自动在本地机器上打开一个并行工作线程池。
使用“本地”配置文件启动并行池(parpool)…连接到4个工人. ...运行时间为10.760068秒。
parfor
在四个工人上运行比相应的快三倍为
循环运行。这种加速比理想的4对4个工人的加速要小。这是由于并行开销造成的,包括将数据从客户机传输到工作程序并传输回来所需的时间。这个示例展示了一个很好的加速,并行开销相对较小,并且从转换为parfor
循环。并不是所有的为
-loop迭代可以变得更快parfor
循环。要了解更多信息,请参见决定何时使用parfor。
使用的一个关键要求parfor
-loops是单独的迭代必须是独立的。适合于parfor
处理包括蒙特卡罗模拟和参数扫描。有关后续步骤,请参见将for循环转换为parfor循环。
在本例中,您设法通过转换为
-loop intoparfor
-循环四个工人。您可以通过增加并行池中的工作线程数量来进一步减少运行时间,参见将部分循环扩展到集群和云。
您可以修改集群配置文件来控制运行循环的工人数量,以及工人是在本地还是在集群上。有关配置文件的更多信息,请参见发现集群并使用集群配置文件。
修改并行首选项以控制是否自动创建并行池,以及它在超时前保持可用的时间。有关首选项的更多信息,请参见指定并行偏好。
你可以运行Simulin万博1manbetxk®的并行模型parsim
命令,而不是使用parfor
循环。有关并行使用Simulink的更多信息和示例,请参见万博1manbetx运行多个模拟(万博1manbetx模型)。
另请参阅
相关的话题
这个话题有帮助吗?