主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

在并行池上使用 tall 数组

如果您有 Parallel Computing Toolbox™,则可以在本地 MATLAB® 会话中或本地并行池中使用 tall 数组。如果您安装了 MATLAB Parallel Server™,您还可以在集群上运行 tall 数组计算。此示例使用您计算机上的本地集群中的工作单元。您可以在本地开发代码,然后扩大规模,以利用 Parallel Computing Toolbox 和 MATLAB Parallel Server 提供的功能,而无需重写算法。另请参阅使用 tall 数组和数据存储的大数据工作流

创建一个数据存储并将其转换为 tall 表。

ds = datastore('airlinesmall.csv');
varnames = {'ArrDelay', 'DepDelay'};
ds.SelectedVariableNames = varnames;
ds.TreatAsMissing = 'NA';

如果您安装了 Parallel Computing Toolbox,当您使用 tall 函数时,MATLAB 会自动启动一个并行工作单元池,除非您关闭默认并行池首选项。默认集群使用您计算机上的本地工作单元。

注意

如果要关闭并行池的自动打开,请更改并行设置。如果您关闭自动创建并行池选项,那么如果您希望 tall 函数使用它进行并行处理,则必须明确启动一个池。请参阅指定并行设置

如果您有 Parallel Computing Toolbox,您可以运行与 MATLAB tall 表示例相同的代码,并在本地计算机的工作单元上并行执行它。

从数据存储中创建一个 tall 表 tt

tt = tall(ds)
Starting parallel pool (parpool) using the 'Processes' profile ...
connected to 4 workers.

tt =

  M×2 tall table 

    ArrDelay    DepDelay
    ________    ________

     8          12      
     8           1      
    21          20      
    13          12      
     4          -1      
    59          63      
     3          -2      
    11          -1      
    :           :
    :           :

显示内容表明行数 M 尚不清楚。M 是一个占位符,直到计算完成。

从 tall 表中提取到达延迟 ArrDelay。此操作将创建一个新的 tall 数组变量以供后续计算使用。

a = tt.ArrDelay;

您可以对 tall 数组指定一系列操作,这些操作直到调用 gather 才会执行。这样做可以让您批处理可能需要很长时间的命令。例如,计算到达延迟的平均值和标准差。使用这些值来构建平均值 1 个标准差以内的延迟的上限和下限阈值。

m = mean(a,'omitnan');
s = std(a,'omitnan');
one_sigma_bounds = [m-s m m+s];

使用 gather 计算 one_sigma_bounds,并将答案记入内存。

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 4.5 sec
Evaluation completed in 6.3 sec

sig1 =

  -23.4572    7.1201   37.6975

如果您想同时评估几件事,您可以为 gather 指定多个输入和输出。这样做比在每个 tall 数组上单独调用 gather 要快。作为示例,计算最小和最大到达延迟。

[max_delay, min_delay] = gather(max(a),min(a))
max_delay =

        1014

min_delay =

   -64

如果您想要串行开发并且不使用本地工作单元或指定的集群,请输入以下命令。

mapreducer(0);
如果在创建 tall 数组后使用 mapreducer 更改执行环境,则该 tall 数组无效,必须重新创建它。要再次使用本地工作单元或指定的集群,请输入以下命令。
mapreducer(gcp);

注意

使用 tall 数组开发算法的好处之一是您只需编写一次代码。您可以在本地开发代码,然后使用 mapreducer 扩展到集群,而无需重写算法。有关示例,请参阅 在 Spark 集群上使用 tall 数组

另请参阅

| | | | |

主题