主要内容

将阵列分发到平行工人

使用分布式阵列将数据分区跨工人分区

根据您的数据如何适应内存,选择以下方法之一:

  • 如果您的数据目前在本地计算机的内存中,则可以使用分散式函数从客户端工作区分发到并行池的工人。此选项可用于测试或执行在执行操作之前显着增加阵列的大小,例如repmat.

  • 如果您的数据不适合本地计算机的内存,但确实适合群集的内存,则可以使用数据存储与之分散式函数读取数据进入并行池的工人的内存。

  • 如果您的数据不适合群集的内存,则可以使用数据存储阵列分区和处理块中的数据。也可以看看使用高阵列和数据存储的大数据工作流程

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

如果您的数据不适合本地计算机的内存,但确实适合群集的内存,则可以使用数据存储与之分散式功能要创建分布式数组并分区工人之间的数据。

此示例显示如何使用和加载分布式阵列数据存储。使用航空公司飞行数据的表格文件创建数据存储。此数据集太小,无法对工人进行数据相同的分区。要模拟大数据集,人为地增加数据存储的大小repmat.

files = repmat({'airlinesmall.csv'},10,1);ds = tabulartextdataStore(文件);

选择示例变量。

ds.selectedvariablenames = {'deptime''depdelay'};ds.treatasmissing ='na';

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

dt =分布式(DS);
使用“本地”配置文件启动并行池(Parpool)...连接到4名工人。

显示有关分布式表的摘要信息。

摘要(DT)
变量:DEPTIME:1,235,230×1双倍值:MIN 1 MAX 2505 NANS 23,510 DEPDELAY:1,235,230×1双倍值:MIN -1036 MAX 1438 NANS 23,510

确定高表的大小。

尺寸(dt)
ans = 1235230 2

返回前几行DT.

头(dt)
ANS = DEPTIME depdelay _________________________342 12 10211 2055 20 1332 12 629 -1 1446 63 928 -2 859 -1 1833 3 1041 1

最后,检查每个工作人员加载的数据量。

SPMD.,dt,结尾
工人1:这个工作人员存储DT2(1:370569,:)。localpart:[370569×2表]译码员:[1×1鳕鱼推导图1d]工人2:这个工作人员存储DT2(370570:617615,:)。localpart:[247046×2表]译码员:[1×1鳕鱼推导图1d]工人3:这个工人存储DT2(617616:988184,:)。localpart:[370569×2表]译码员:[1×1鳕鱼推导图1d]工人4:这个工作人员存储DT2(988185:1235230,:)。localPart:[247046×2表]译码员:[1×1鳕鱼铁器1d]

请注意,数据将同等地划分为工人。有关更多细节数据存储, 看什么是数据存储?

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

用于创建分布式和编码阵列的替代方法

如果您的数据适合本地计算机的内存,则可以使用分布式阵列分区工人之间的数据。使用分散式在MATLAB客户端中创建分布式数组的函数,并将其数据存储在打开并行池的工人上。分布式阵列在一个尺寸中分布,并且沿着工人之间的那个尺寸均匀地分布。创建分布式数组时,无法控制分发的细节。

您可以通过多种方式创建分布式数组:

  • 使用分散式函数从客户端工作区分发到并行池的工人。

  • 使用任何一个分散式用于直接在工人上构建分布式数组的功能。该技术不要求客户端存在阵列,从而减少客户端工作空间内存要求。功能包括眼睛(___,'分散式')兰特(___,'分散式')。对于完整列表,请参阅分散式对象参考页面。

  • 在一个中创建一个编码的数组SPMD.语句,然后将其作为一个分布式数组访问SPMD.陈述。此技术允许您使用默认值以外的分发方案。

前两种技术不涉及SPMD.在创建数组时,但可以使用SPMD.操纵以这种方式创造的数组。例如:

在客户端工作区中创建数组,然后使其成为分布式数组。

Parpool('当地的'2)%创建池W =(6,6);w =分布(w);%分配给工人SPMD.t = w * 2;%计算对工人进行并行进行。%t和w在这里都是编码阵列。结尾T.%查看客户端的结果。谁是%t和w在这里都是分布式阵列。删除(GCP)%停止池

或者,您可以使用译文函数,允许您控制更多选项,例如维度和分区,但通常更复杂。你可以创建一个译文阵列通过在工人自己身上执行,无论是在SPMD.声明或在沟通工作中。创建A.译文数组,您可以控制分发的所有方面,包括尺寸和分区。

分布式和编码阵列之间的关系是透视之一。编码阵列在执行代码以创建或操作它们的工人之间分区。当您在客户端中创建分布式数组时,可以将其访问它作为编码阵列SPMD.陈述。当您在一个中创建编码符号数组时SPMD.语句,您可以将其作为客户端中的分布式数组访问。仅有的SPMD.语句允许您从两种不同的透视图访问相同的数组数据。

你可以创建一个译文数组以多种方式:

  • 使用译文在A.SPMD.声明或通信作业,用于在运行该作业的工人上存在的编码数据。

  • 使用任何编码函数函数直接在工人上构建编码阵列。该技术不要求工人中存在数组。功能包括眼睛(___,'编号')兰特(___,'编号')。对于完整列表,请参阅译文对象参考页面。

  • 在外部创建分布式数组SPMD.语句,然后将其作为一种编码阵列访问SPMD.在同一并行池上运行的语句。

在一个中创建一个编码的数组SPMD.使用非默诺分发方案的声明。首先,沿着第三维定义1-D分布,工人1上有4个零件,15件工人2.然后创建一个3×3×16零的零。

Parpool('当地的'2)%创建池SPMD.代码师= Codistributor1d(3,[4,12]);Z =零(3,3,16,代码分子);z = z + labindex;结尾Z.%查看客户端的结果。%z在此处是分布式阵列。删除(GCP)%停止池

有关编码阵列的更多详细信息,请参阅使用编码阵列

也可以看看

|||||||

相关例子

更多关于