选择如何在并行计算中管理数据
要执行并行计算,您需要管理 MATLAB® 客户端和并行工作单元之间的数据访问和传输。使用此页面来决定如何向客户端和工作单元传输数据。您可以管理文件、MATLAB 变量和句柄类型资源等数据。
确定您的数据管理方法
管理数据的最佳技术取决于您的并行应用程序。使用下表来查找您的目标并找到合适的数据管理函数及其主要特性。在某些情况下,多种类型的对象或函数可能满足您的要求。您可以根据工作流选择对象或函数的类型。
将数据从客户端传输到工作单元
使用此表确定将数据从客户端传输到工作单元的一些目标并发现推荐的工作流。
| 目标 | 推荐的工作流 |
|---|---|
在交互式并行池中使用 MATLAB 工作区中的变量。 |
|
将 MATLAB 工作区中的变量通过批处理工作流传输给集群上的工作单元。 | 将变量作为输入传递到 |
让工作单元访问存储在桌面上的大量数据。 |
|
访问存储在云中的大量数据或大文件,并在现场或云集群中进行处理。 | 使用带有 tall 数组和分布式数组的 |
允许工作单元访问存储在客户端计算机上的文件。 | 对于并行池中的工作单元:
对于运行批处理作业的工作单元:
|
访问存储在集群上的自定义 MATLAB 函数或库。 | 使用并行作业的 |
允许并行池中的工作单元访问不可复制的资源,例如数据库连接或文件句柄 | 使用 |
向正在运行某个函数的交互式池中的工作单元发送一条消息。 | 创建一个工作单元可以轮询以接收数据的 在 R2025a 之前的版本中: 在工作单元端创建一个 |
在工作单元之间传输数据
使用此表确定在工作单元之间传输数据的一些目标并发现推荐的工作流。
| 目标 | 推荐的工作流 |
|---|---|
| 在交互式并行池中,使用 使用 |
卸载工作单元的结果,以供另一个工作单元处理。 | 将数据存储在作业或并行池的 |
将数据从工作单元传输到客户端
使用此表来确定将数据从工作单元传输到客户端的一些目标并发现推荐的工作流。
| 目标 | 推荐的工作流 |
|---|---|
从 | 将 |
在客户端检索大量结果。 | 将数据存储在作业或并行池的 |
| 使用并行池或作业的 |
从并行作业中获取结果。 | 将 |
从运行脚本或表达式的 | 将 |
在执行期间将数据从工作单元传输到客户端
使用此表确定在执行期间从工作单元传输数据的一些目标并发现推荐的工作流。
| 目标 | 推荐的工作流 |
|---|---|
检查交互式并行池中 | 使用 |
使用在交互式并行池中运行的函数的数据更新图、进度条或其他用户界面。 | 使用 对于需要调用 1000 次 |
异步收集数据以使用来自 | 使用 |
| 将数据存储在作业的 |
| 将文件存储在作业的 |
比较数据管理函数和对象
一些管理数据的并行计算对象和函数具有类似的特点。本节对具有类似数据管理功能的函数和对象进行了比较。
DataQueue 与 ValueStore
DataQueue 和 ValueStore 是 Parallel Computing Toolbox™ 中的两个对象,您可以使用它们在客户端和工作单元之间传输数据。DataQueue 对象按照先进先出 (FIFO) 的顺序将数据从工作单元传递给客户端,而 ValueStore 存储多个工作单元以及客户端可以访问和更新的数据。您可以使用这两个对象向客户端进行异步数据传输。但是,DataQueue 仅在交互式并行池中受支持。
DataQueue 和 ValueStore 之间的选择取决于并行应用程序中所需的数据访问模式。如果您有许多独立的任务,工作单元可以按任何顺序执行这些任务,并且您希望以流式方式将数据传递给客户端,那么请使用 DataQueue 对象。但是,如果您想存储和共享值给多个工作单元并随时访问或更新它,那么请改用 ValueStore。
fetchOutputs (parfeval) 与 ValueStore
使用 fetchOutputs 函数检索 Future 对象的输出参量,软件在您运行 parfeval 或 parfevalOnAll 计算时返回该参量。fetchOutputs 阻止客户端直到计算完成,然后将 parfeval 或 parfevalOnAll 计算的结果发送到客户端。相比之下,您可以使用 ValueStore 来存储和检索任何并行计算的值,还可以在不阻止程序的情况下检索生成的中间结果。此外,ValueStore 对象不保存在系统内存中,因此您可以将大量结果存储在 ValueStore 中。不过,存储大量数据时要小心,以免填满集群上的磁盘空间。
如果您只需要检索 parfeval 或 parfevalOnAll 计算的输出,那么 fetchOutputs 是更简单的选项。但是,如果您想存储和访问多个独立并行计算的结果,请使用 ValueStore。当有多个 parfeval 计算生成大量数据时,使用池 ValueStore 对象可以帮助避免客户端的内存问题。您可以将结果暂时保存在 ValueStore 中,并在需要时检索它们。
load 和 fetchOutputs (Jobs) 与 ValueStore
load、fetchOutputs (Jobs) 和 ValueStore 提供了将数据从作业传回客户端的不同方式。
load 检索与您使用 batch 函数运行脚本或表达式时创建的作业相关的变量。这包括您提供的任何输入参量和工作单元在计算过程中创建的临时变量。load 不会从运行函数的 batch 作业中检索变量,并且您无法在作业运行时检索结果。fetchOutputs (Jobs) 检索您使用 batch、createJob 或 createCommunicatingJob 函数创建的已完成作业的任务中包含的输出参量。如果调用 fetchOutputs (Jobs) 函数时作业仍在运行,则 fetchOutputs (Jobs) 函数将返回错误。
当您在集群上创建一个作业时,软件会自动为该作业创建一个 ValueStore 对象,您可以使用它来存储作业执行过程中生成的数据。与 load 和 fetchOutputs 函数不同,ValueStore 对象不会自动存储数据。相反,您必须手动将数据作为键值对添加到 ValueStore 对象。工作单元可以将数据存储在 ValueStore 对象中,MATLAB 客户端可以在作业执行期间检索该对象。此外,ValueStore 对象不保存在系统内存中,因此您可以在存储库中存储大量结果。
要在作业完成后检索作业结果,请使用 load 或 fetchOutputs (Jobs) 函数。要在作业仍在运行时访问结果或跟踪作业的进度,或者存储可能占用大量内存的结果,请使用 ValueStore 对象
AdditionalPaths 与 AttachedFiles 与 AutoAttachedFiles
AdditionalPaths、AttachedFiles 和 AutoAttachedFiles 都是并行作业属性,您可以使用它们来指定在工作单元上运行并行代码所需的其他文件和目录。
AdditionalPaths 是一个属性,您可以使用它将集群文件位置添加到运行您的作业的所有工作单元程序上的 MATLAB 路径中。如果在集群存储中存储了包含大量数据的文件、工作单元所需的函数或库,但默认情况下它们不在 MATLAB 路径上,那么这将很有用。
AttachedFiles 属性允许您指定工作单元所需但未存储在集群存储上的文件或目录。在并行代码运行之前,这些文件被复制到每个工作单元上的临时目录中。这些文件可以是脚本、函数或数据文件,并且必须位于客户端的目录结构内。
使用 AutoAttachedFiles 属性允许工作单元所需的文件自动附加到作业。当您提交一个作业或任务时,MATLAB 会对所有任务函数,或者批处理作业脚本或函数执行依赖关系分析。然后,它会自动将所需的文件添加到作业或任务对象中,以便将其传输给工作单元。本质上,如果您知道不需要软件为您识别文件,则只需将 AutoAttachedFiles 属性设置为 false。例如,如果您的作业要使用的文件已经存在于集群中,那么可能位于其中一个 AdditionalPaths 位置内。
当集群上存储了所有工作单元都需要的函数和库时,使用 AdditionalPaths。当您有运行代码所需的小文件时,请使用 AttachedFiles。为了让 MATLAB 自动确定作业是否需要运行其他文件,请将 AutoAttachedFiles 属性设置为 true。
另请参阅
ValueStore | FileStore | parallel.pool.Constant | parallel.pool.PollableDataQueue | spmdSend | spmdReceive | spmdSendReceive | spmdBarrier | fetchOutputs | fetchOutputs | load | parallel.pool.DataQueue