主要内容

分布阵列并行工人

使用分布式阵列划分数据工人

这取决于你的数据适合在内存中,选择以下方法之一:

  • 如果您的数据目前在本地机器的内存,你可以使用分布式函数分配现有的数组从客户机工作区平行池的工人。这个选项可以用于测试或执行操作前显著增加数组的大小等repmat

  • 如果您的数据并不适合在本地机器上的记忆,但却适合您的集群的记忆,你可以使用数据存储分布式函数来读取数据到内存中工人的一个平行的池。

  • 如果您的数据不符合您的集群的记忆,你可以使用数据存储数组划分和处理你的数据块。另请参阅大数据工作流使用高阵列和数据存储

加载并行分布式阵列使用数据存储

如果您的数据并不适合在本地机器上的记忆,但却适合您的集群的记忆,你可以使用数据存储分布式分布式数组和函数来创建分区数据在你的工人。

这个例子显示了如何创建和加载分布式阵列使用数据存储。使用一个表格文件创建一个数据存储的航空飞行数据。这个数据集太小,显示员工平等的分区的数据。模拟大数据集,人为地增加数据存储使用的大小repmat

文件= repmat ({“airlinesmall.csv”}10 1);ds = tabularTextDatastore(文件);

选择变量的例子。

ds。SelectedVariableNames = {“DepTime”,“DepDelay”};ds。TreatAsMissing =“NA”;

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

dt =分布式(ds);
开始平行池(parpool)使用过程的概要文件…连接到4工人。

显示汇总信息分布表。

总结(dt)
变量:DepTime: 1235230×1双值:最小1最大2505 nan 23510 DepDelay: 1235230×1双值:1438分钟-1036 max nan 23510

确定高表的大小。

大小(dt)
ans = 1235230 2

返回的前几行dt

头(dt)
ans = DepTime DepDelay _________ ________ 642 1021 2055 1332 629 1 1446 63 928 1041 859 1833 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]

注意,数据分区的工人一样。为更多的细节数据存储,请参阅什么是数据存储?

更多细节关于大数据的工作流,明白了选择一个并行计算解决方案

替代方法用于创建分布式和Codistributed数组

如果您的数据符合本地机器的内存,你可以使用分布式阵列划分你的工人之间的数据。使用分布式在MATLAB函数来创建一个分布式阵列客户机,并存储其数据的工人开放平行池。分布式阵列在一维分布,尽可能均匀,尺寸的工人。你不能控制在创建一个分布式阵列分布的细节。

您可以创建一个分布式阵列在几个方面:

  • 使用分布式函数分配现有的数组从客户机工作区平行池的工人。

  • 使用任何的分布式函数直接构建一个分布式阵列的工人。这种技术不需要数组已经存在于客户端,从而减少客户工作区内存需求。功能包括眼睛(___“分布式”)兰德(___“分布式”)。一个完整的列表,请参阅分布式对象引用页面。

  • 创建一个codistributed数组里面spmd声明,然后作为分布式阵列外访问它spmd声明。这种技术允许您使用默认以外的分配方案。

前两个技术不涉及spmd在创建数组,但您可以使用spmd以这种方式操作数组创建。例如:

客户的工作区中创建一个数组,然后让它一个分布式阵列。

parpool (“过程”,2)%创建池W = 1 (6,6);W =分布式(W);%分发给工人spmdT = W * 2;%计算工人上执行,并行执行。% T和W都codistributed数组。结束T%在客户端查看结果。% 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声明中使用默认的分配方案。首先,沿着第三维度定义一维分布,与4部分工人1,12部分工人2。然后创建一个3-by-3-by-16零的数组。

parpool (“过程”,2)%创建池spmdcodist = codistributor1d (3 (4、12));Z = 0 (codist 3, 3, 16日);Z = Z + spmdIndex;结束Z%在客户端查看结果。% Z是一个分布式阵列。删除(gcp)%停止池

codistributed数组的更多细节,请参阅使用Codistributed数组

另请参阅

|||||||

相关的例子

更多关于