Main Content

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

spmdReduce

减少 spmd 工作进程上的数组

自 R2022b 起

    说明

    示例

    B = spmdReduce(fcn,A) 使用函数 fcn 来减少在每个运行 spmd 代码块或通信作业的工作进程上定义的数组 A。该函数存储每个工作进程上的归约结果 B。

    例如,spmdReduce(@plus,A) 返回每个工作进程上定义的数组 A 的总和。

    MATLAB® 使用 fcn 函数通过调用 N - 1 次函数来减少 AJ

    • N 是运行 spmd 代码块或通信作业的工作进程数量。要获取运行当前 spmd 代码块的工作进程数量,请使用 spmdSize 函数

    • Aj 是在 spmd 工作进程上定义的数组 A,其索引为 j。

    为了确保您的 spmd 代码块或通信作业始终产生相同的结果,请将 fcn 指定为关联函数。

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

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

    B = spmdReduce(fcn,A,destination) 减少 A 并将结果存储在仅一个工作进程上。

    示例

    全部折叠

    此示例显示如何使用 spmdReduce 计算所有工作进程数组的最大值。

    创建一个有四个工作进程的并行池。

    parpool(4);

    当您在创建并行池后执行 spmd 代码块时,默认情况下,池中所有可用的工作进程都会运行 spmd 代码块内的代码。

    spmd 代码块中的每个工作进程上运行 spmdIndex,并将结果存储在 A 中。使用 spmdReducemax 计算每个工作进程 A 的最大值。

    除非您指定目标,否则 spmdReduce 会将结果存储在每个工作进程身上。在客户端,结果是 复合 对象。要获得结果,请索引到 Composite 对象。

    spmd
        A = spmdIndex;
        B = spmdReduce(@max,A);
    end
    disp(B{1})
         4

    输入参数

    全部折叠

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

    示例: A = magic(3)

    归约函数,指定为函数句柄。归约函数必须采用两个输入参量。

    示例: fcn = @max

    数据类型: function_handle

    目标工作进程的索引,指定为正整数或空数组。此输入的值必须小于或等于运行当前 spmd 代码块或通信作业的工作进程数量。

    当您指定此输入时,该函数仅将 B 的值存储在具有此索引的工作进程上。在索引等于 destination 的工作进程上,B 是运算的结果。在所有其他工作进程上,B[]

    示例: 1

    算法

    该图显示了当调用 spmdReduce(fcn,A)spmdReduce 函数如何使用 fcn

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

    扩展功能

    版本历史记录

    在 R2022b 中推出