议案
一种议案
- 在matlab中®并行执行循环体中的一系列语句。Matlab客户提供问题议案
使用Matlab Workers的命令和坐标,以在工人身上并行执行循环迭代平行池.客户端发送必要的数据议案
运营到工人,其中大部分计算都是在执行的地方。结果将被发送回客户端并组装。
一种议案
-Loop可以提供比其类似的更好的性能为了
-Loop,因为几个Matlab工人可以同时计算同一循环。
每次执行身体议案
-loop是一个迭代.Matlab Workers在没有特定的秩序中评估迭代,彼此独立。由于每个迭代是独立的,因此无法保证迭代以任何方式同步,也不需要这一点。如果工人数量等于循环迭代的数量,则每个工作人员执行循环的一次迭代。如果有更多的迭代,一些工人执行多于一个循环迭代;在这种情况下,工作人员可以一次接收多个迭代以减少通信时间。
一种议案
- 如果你有慢速,它可能很有用为了
-环形。考虑议案
如果你有:
一些需要很长时间才能执行的循环迭代。在这种情况下,工人可以同时执行长期迭代。确保迭代的数量超过工人的数量。否则,您不会使用所有可用的工人。
许多循环迭代的简单计算,例如蒙特卡罗模拟或参数扫描。议案
将循环迭代划分为组,以便每个工作人员执行迭代总数的某些部分。
一种议案
- 如果您有:
转移出来的代码为了
- 砍伐。通常,如果您想更快地运行代码,请首先尝试向量化它。有关详细信息如何执行此操作,请参阅矢量化.向量化代码使您能够从许多底层MATLAB库的多线程特性所提供的内置并行性中获益。但是,如果您有向量化的代码,并且您只能访问当地的然后工人议案
-loops可能运行得比为了
- 砍伐。不要划分代码以允许议案
;通常,该解决方案不起作用。
循环迭代,需要短时间执行。在这种情况下,并行开销主导您的计算。
你不能使用议案
- 循环中的迭代取决于其他迭代的结果时。每次迭代都必须独立于所有其他迭代。有关帮助处理独立循环,请参阅确保Paret-Loop迭代是独立的.此规则的异常是使用循环中的值累积减少变量.
在决定何时使用议案
,考虑并行开销。并行开销包括通信,协调和数据传输 - 发送和接收数据所需的时间 - 从客户到工人和后退。如果迭代评估快速,则此开销可能是总时间的重要部分。考虑两种不同类型的循环迭代:
为了
- 具有计算要求苛刻的任务。这些循环通常是转换成的候选人议案
-loop,因为计算所需的时间占据数据传输所需的时间。
为了
- 具有简单的计算任务。这些环通常不会从转换中受益议案
- 因此,与计算所需的数据传输所需的时间与计算所需的时间有效。
议案
低平行开销在此示例中,您可以从一个计算所需的苛刻的任务开始为了
-环形。这为了
- leops很慢,你加快计算使用议案
- 改为。议案
分割执行为了
- 在并行池中的工人上迭代。
该示例计算矩阵的频谱半径并转换a为了
- 进入A.议案
-环形。了解如何衡量结果的加速度以及从并行池中的工人传输多少数据。
在MATLAB编辑器中,输入以下内容为了
-环形。添加Tic.
和TOC.
测量计算时间。
Tic n = 200;a = 500;a =零(n);为了i = 1:n(i)= max(abs(eig(rand(a)))));结尾TOC.
运行脚本,并注意经过的时间。
经过时间是31.935373秒。
在脚本中,更换为了
- 与A.议案
-环形。添加ticbytes.
和tocbytes.
要测量并行池中从工人转移多少数据。
tic ticbytes(gcp);n = 200;a = 500;a =零(n);议案i = 1:n(i)= max(abs(eig(rand(a)))));结尾tocbytes(gcp)toc
在四个工人上运行新脚本,然后再次运行它。请注意,第一个运行比第二次运行慢,因为并行池需要一些时间才能启动并使工人可用的代码。注意第二次运行的数据传输和经过的时间。
默认情况下,Matlab会自动打开本地计算机上的并行工人池。
使用“local”配置文件启动并行池(parpool)…连接到4个工人. ...bytesenttoworkers BytesReceivedFromWorkers __________________ ________________________ 1 15340 7024 2 13328 5712 3 13328 5704 4 13328 5728 Total 55324 24168 Elapsed time is 10.760068 seconds。
议案
在四名工人上运行大约比相应的速度快三倍为了
-loop计算。速度小于四个工人上有四倍的理想加速。这是由于并行开销,包括将数据从客户端传输到工人和背部所需的时间。使用ticbytes.
和tocbytes.
结果检查转移的数据量。假设数据传输所需的时间与数据的大小成比例。此近似允许您介绍数据传输所需的时间,并与其他相比并行开销进行比较议案
-loop迭代。在该示例中,与下一个示例相比,数据传输和并行开销很小。当前示例的开销低并从转换成a的福利议案
-环形。将此示例与下一个示例中的简单循环迭代进行比较,请参阅具有高平行开销的Parcol的示例.
另一个例子议案
- 使用计算要求苛刻的任务,请参阅嵌套Parcon和循环和其他Paret要求
议案
高平行的开销在此示例中,您写入循环以创建一个简单的正弦波。更换为了
- 与A.议案
-loop是不是加快计算。此循环没有很多迭代,它不需要长时间执行,并且您不会注意到执行速度的增加。此示例具有高并行开销,不会从转换中受益议案
-环形。
写一个循环以创建正弦波。采用Tic.
和TOC.
测量经过的时间。
Tic n = 1024;a =零(n);为了i = 1:n a(i,:) =(1:n)。* sin(i * 2 * pi / 1024);结尾TOC.
经过时间为0.012501秒。
更换为了
- 与A.议案
-环形。添加ticbytes.
和tocbytes.
要测量并行池中从工人转移多少数据。
tic ticbytes(gcp);n = 1024;a =零(n);议案(i = 1:n)a(i,:) =(1:n)。* sin(i * 2 * pi / 1024);结尾tocbytes(gcp)toc
在四个工作人员上运行脚本并再次运行代码。请注意,第一个运行比第二次运行慢,因为并行池需要一些时间才能启动并使工人可用的代码。注意第二次运行的数据传输和经过的时间。
BytessentToworks BytesreceivedFromWorkers ________________________________________113176 2.0615E + 06 2 15188 2.0874C + 06 3 13176 2.4056C 2.4056C + 06 4 13176 1.8567E + 06总共54716 8.4112E + 06经过的时间为0.743855秒。
为了
- 而不是为议案
- 在四名工人身上。在这种情况下,您不会受益转动您的为了
- 进入A.议案
-环形。原因是数据转移远远大于前面的示例中,见具有低平行开销的Parcol的示例.在当前示例中,并行开销主导计算时间。因此,正弦波迭代不会从转换中受益议案
-环形。此示例说明了为什么高并行开销计算不会从转换中受益议案
-环形。要了解有关加快代码的更多信息,请参阅将循环转换为循环循环