主要内容

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

gop

(不推荐)减少 spmd 工作单元上的数组

    不推荐使用 gop。请改用 spmdReduce。有关详细信息,请参阅版本历史记录

    说明

    B = gop(fcn,A) 使用函数 fcn 来减少在每个运行 A 代码块或通信作业的工作单元上定义的数组 spmd

    例如,gop(@plus,A) 返回每个工作单元上定义的数组 A 的总和。

    MATLAB 使用 fcn 函数通过调用 A 次函数来减少每个工作单元上定义的数组 N-1

    • N 是该 spmd 代码块或通信作业中 numlabs 返回的值。

    • Aj 是在 spmd 工作单元 j 上定义的数组 A

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

    如果 numlabs 等于 1,则 B 等于 A

    示例

    B = gop(fcn,A,destination) 减少每个工作单元上定义的数组 A,并将结果仅存储在一个工作单元上。

    示例

    全部折叠

    此示例显示如何使用 gop 计算所有工作单元中 x 的最大值。

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

    parpool(4);

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

    spmd 代码块中的每个工作单元上运行 labindex,并将结果存储在标量 A 中。使用 gopmax 计算每个工作单元 A 的最大值。

    当您使用 gop 时,默认情况下结果会存储在每个工作单元上。在客户端上,C 是一个 Composite 数组。要获得结果,请索引 Composite 数组。

    spmd
        A = labindex;
        C = gop(@max,A);
    end
    disp(C{1})
     4

    输入参数

    全部折叠

    输入数组,指定为任何 MATLAB 变量。

    示例: magic(3)

    归约函数,指定为函数句柄。该函数必须接受两个输入参量。

    示例: fcn = @max

    数据类型: function_handle

    目标工作单元的索引,指定为正整数标量。该值必须小于或等于 numlabs 给出的值,即运行当前 spmd 代码块或通信作业的工作单元程序的数量。当指定时,gop(fcn,A,destination) 的结果仅存储在一个工作单元上。在 labindex 等于 destination 的工作单元上,C 是运算的结果。在所有其他工作单元上,C[]

    示例: 1

    算法

    当您使用 gop(fcn,A) 时,fcn 用于组合来自每个工作单元 的 A 的值。

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

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

    扩展功能

    全部展开

    版本历史记录

    在 R2006a 之前推出

    全部折叠