分发到阵列并行的工人

使用分布式数组对数据进行分区跨工人

根据在存储数据拟合如何,选择下列方法之一:

  • 如果你的数据是目前在本地计算机的内存,你可以使用分散式函数从客户工作区现有阵列分配到平行池的工人。此选项可用于测试或执行操作,这些操作显著增加数组的大小,如以前是有用的repmat

  • 如果你的数据不适合在本地计算机的内存,但不适合在群集的内存,你可以使用数据存储分散式功能将数据读入一个并行池的工人的记忆。

  • 如果你的数据不会在群集中的装入内存,你可以使用数据存储阵列分区,并在处理大块数据。也可以看看大数据工作流程中使用高大的阵列和数据存储

在并行负载分布阵列使用数据存储

如果你的数据不适合在本地计算机的内存,但不适合在群集的内存,你可以使用数据存储分散式函数来创建分布式数组和你的员工之间的数据分区。

此示例示出了如何创建和使用加载分布式数组数据存储。创建使用航空公司的航班数据的表格文件的数据存储。这组数据是太小,无法显示在工人中的数据相等的分区。为了模拟一个大的数据集,通过人为地增加数据存储的大小repmat

文件= repmat({'airlinesmall.csv'},10,1);DS = tabularTextDatastore(文件);

选择示例性变量。

ds.SelectedVariableNames = {'DepTime''DepDelay'};ds.TreatAsMissing ='NA';

通过并行读取数据存储创建一个分布式表。分区中的数据存储与每个工人的一个分区。每个工人随后读取从相应分区中的所有数据。该文件必须在是由工人访问的共享位置。

DT =分布式(DS);
开始使用“本地”的个人资料...连接到4名工人并行池(parpool)。

显示关于分布式表的汇总信息。

摘要(DT)
变量:DepTime:1235230×1双值:分1周最大值2505米的NaN 23510 DepDelay:1235230×1双值:分钟-1036最大值1438米的NaN 23510

确定高大表的大小。

大小(DT)
ANS = 1235230 2

返回的前几行DT

头(DT)
ANS = DepTime DepDelay _______ ________ 642 12 1021 1 2055 20 1332 12 629 1446 -1 63 928 -2 859 -1 1833 1041 3 1

最后,检查多少数据每个工人已加载。

SPMD,DT,结束
实验1:这个工人店DT2(1:370569,:)。LocalPart依照:[370569×2表] Codistributor:[1×1 codistributor1d]实验2:这个工人存储DT2(370570:617615,:)。LocalPart依照:[247046×2表] Codistributor:[1×1 codistributor1d]实验3:这个工人存储DT2(617616:988184,:)。LocalPart依照:[370569×2表] Codistributor:[1×1 codistributor1d]实验4:这个工人存储DT2(988185:1235230,:)。LocalPart依照:[247046×2表] Codistributor:[1×1 codistributor1d]

请注意,该数据在工人平衡分配。有关详细信息数据存储什么是数据存储?(MATLAB)

有关工作流的大数据的详细信息,请参阅选择并行计算解决方案

替代方法创建分布式和Codistributed阵列

如果在你的本地计算机的内存数据拟合,可以使用分布式数组到员工的安全分区中的数据。使用分散式函数来创建在MATLAB客户端分布式阵列,并将其数据存储在开放式并行池的工人。分布式阵列沿工人中该尺寸分布在一个维度,并尽可能均匀地。创建分布式阵列时,你无法控制分布的细节。

您可以多种方式创建一个分布式数组:

  • 使用分散式函数从客户工作区现有阵列分配到平行池的工人。

  • 使用任何分散式功能直接构造于工人的分布式阵列。该技术不要求阵列已经存在于客户机,从而减少客户工作区的存储器需求。功能包括:眼睛(___,'分散式')兰特(___,'分散式')。有关完整列表,请参阅分散式对象引用页面。

  • 创建codistributed阵列内的SPMD语句,然后它作为访问外部的分布式阵列SPMD声明。这种技术可让您使用的不是缺省分配方案。

前两种技术不涉及SPMD在创建数组,但你可以使用SPMD操作阵列中创建这种方式。例如:

创建在所述客户端的工作区的阵列,然后使之成为分布阵列。

parpool('本地',2)%创建池W =酮(6,6);W =分布(W);%分配给工人SPMDT = W * 2;%计算工人执行,并行。%T和W在这里都codistributed阵列。结束Ť%查看导致客户端。谁是%T和W是这里都分布阵列。删除(GCP)%停止池

另外,您也可以使用codistributed功能,它允许您控制更多的选项,如尺寸和分区,但往往变得更复杂。您可以创建一个codistributed阵列由内部的上工人本身执行,或者SPMD声明或通信工作中。创建一个时codistributed阵列,可以控制分布的各个方面,包括尺寸和分区。

分布和codistributed阵列之间的关系是透视之一。Codistributed阵列从中执行代码来创建或操纵他们在工人中进行分配。当您在客户端分布式阵列,您可以访问它作为内部的一个codistributed阵列SPMD声明。当您创建在一个codistributed阵列SPMD声明中,你可以访问它的客户分布阵列。只要SPMD声明让你从两个不同的视角访问相同的数组数据。

您可以创建一个codistributed阵列在几个方面:

  • 使用codistributed函数内的SPMD声明或通信作业codistribute数据已经在运行的作业工人存在。

  • 使用任何codistributed功能直接构建在工人codistributed阵列。这种技术不需要数组已经存在于工人。功能包括:眼睛(___, 'codistributed')兰特(___, 'codistributed')。有关完整列表,请参阅codistributed对象引用页面。

  • 创建分布式阵列外部的SPMD语句,那么访问它里面的一个codistributed阵列SPMD声明在同一平行池中运行。

创建codistributed阵列内的SPMD使用非默认的分配方案声明。首先,定义1-d分布沿着第三维,与4份对工人1,和12份对工人2.然后创建一个3×3×16阵列的零。

parpool('本地',2)%创建池SPMDcodist = codistributor1d(3,[4,12]);Z =零(3,3,16,codist);Z = Z + labindex;结束ž%查看导致客户端。%Z是这里的分布式阵列。删除(GCP)%停止池

有关codistributed阵列的更多详细信息,请参阅与Codistributed阵列工作

也可以看看

|||||||

相关的例子

更多关于