主要内容

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

spmdCat

spmd 工作单元上连接数组

自 R2022b 起

    说明

    B = spmdCat(A) 水平连接在每个运行 spmd 代码块或通信作业的工作单元上定义的数组 A

    当您使用 parforparfevalparfevalOnAll 在并行池上运行代码时,工作单元是独立的并且彼此不会通信。如果您在这些工作单元上使用 spmdCat,其结果与在客户端上使用 spmdCat 相同。

    仅当 A 可以沿第二维度连接时,才可以使用 spmdCat

    此函数沿第二个维度连接数组,然后将结果存储在所有工作单元上。该函数从每个工作单元中获取 A 的值,并按照工作单元索引的顺序连接结果。要获取工作单元的索引,请使用 spmdIndex 函数。例如,spmdCat(spmdIndex) 返回 1:spmdSize,其中 spmdSize 是运行当前 spmd 代码块或通信作业的工作单元数。

    如果一个工作单元正在运行当前的 spmd 代码块,则 B 等于 A

    示例

    B = spmdCat(A,dim) 沿维度 dim 连接 A

    仅当所有数组具有兼容的大小且 A 沿维度 dim 连接时,才可以使用 spmdCat。当除操作维度 dim) 之外的维度长度匹配时,数组具有兼容的大小。

    B = spmdCat(A,dim,destination) 连接 A 并将结果存储在仅一个工作单元上。

    示例

    全部折叠

    此示例显示如何使用 spmdCat 连接 spmd 代码块中每个工作单元持有的标量。

    创建一个有四个工作单元的并行池。

    parpool(4);

    创建一个 spmd 代码块。默认情况下,池中的每个工作单元都会运行 spmd 代码块。将每个工作单元上 spmdIndex 返回的值存储为 A,然后使用 spmdCat 连接每个工作单元上定义的 A 的值。

    除非您指定目标,否则 spmdCat 函数会将连接的结果存储在每个工作单元上。在客户端,结果是一个 Composite 对象。要获得结果,请索引到 Composite 对象。

    spmd
        B = spmdCat(spmdIndex);
    end
    B{1}
    ans =
         1     2     3     4

    输入参数

    全部折叠

    输入数组,指定为标量、向量、矩阵、多维数组、表、时间表或任何支持连接的 MATLAB 变量。

    示例: A = magic(3)

    维度,指定为正整数。例如,如果 A 是所有工作单元上的 2×2 矩阵,则 spmdCat(A,1) 垂直连接 A 并返回 2 N×2 矩阵,其中 N 是运行当前 spmd 代码块的工作单元数。调用 spmdCat(A,2) 水平连接并返回一个 2×2 的 N 矩阵。

    对于表或时间表输入,dim 必须是 12

    目标工作单元的索引,指定为正整数。此输入的值必须小于或等于当前 spmd 代码块或通信作业中 spmdSize 函数的输出。

    当您指定此输入时,该函数仅将 B 的值存储在具有此索引的工作单元上。B 输出仍然在运行 spmdCat 的所有工作单元上定义。在索引等于 destination 的工作单元上,B 是连接的结果。在所有其他工作单元上,B[]

    输出参量

    全部折叠

    输出数组,返回为与 A 相同类型的任何 MATLAB 变量。

    如果指定 destination,则 B 是索引等于 destination 的工作单元连接的结果。在所有其他工作单元上,B[]

    算法

    该图显示了当您调用 A 时,spmdCat 函数如何将 spmdCat(A) 与其他工作单元上的值连接起来。

    Diagram showing how four workers combine arrays specified as A into a single array, B.

    扩展功能

    全部展开

    版本历史记录

    在 R2022b 中推出

    另请参阅

    | | |