Main Content

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

pagefun

将函数应用到分布式或 GPU 数组的每一页

说明

A = pagefun(FUN,B)FUN 指定的函数应用于分布式或 GPU 数组 B 的每个页面。结果 A 包含每一页结果,例如 A(:,:,I,J,...) = FUN(B(:,:,I,J,...))A 是分布式或 GPU 数组,具体取决于 B 的数组类型。FUN 是接受二维输入参量的函数的句柄。

示例

A = pagefun(FUN,B1,...,Bn) 使用数组 B1,...,Bn 的页面作为输入参量并启用标量扩展来评估 FUN。任何标量的输入页面维度都被虚拟复制以匹配该维度中其他数组的大小,以便 A(:,:,I,J,...) = FUN(B1(:,:,I,J,...),...,Bn(:,:,I,J,...))。输入页面 B(:,:,I,J,...),...,Bn(:,:,I,J,...),必须满足 FUN 的所有输入要求。

如果您计划多次调用 pagefun,那么首先将该数组转换为分布式或 GPU 数组会更有效。

当函数 FUN 返回 m 个输出值时,[A1,...,Am] = pagefun(FUN,___) 会返回多个输出数组 A1,...,Ampagefun 每次调用 FUN 时,输出的个数与调用 pagefun 时一样多,也就是 m 次。如果调用 pagefun 时使用的输出参量多于 FUN 所支持的数量,则 MATLAB® 会产生错误。FUN 可以返回具有不同数据类型的输出参量,但每次调用 FUN 时,每个输出的数据类型必须相同。

示例

全部折叠

此示例显示如何使用 pagefunmtimes 函数应用于两个 GPU 数组 BC 的每一页。

创建两个 GPU 数组,BC

M = 3;         % output number of rows
K = 6;         % matrix multiply inner dimension
N = 2;         % output number of columns
P1 = 10;       % size of first array dimension (row size)
P2 = 17;       % size of second array dimension (column size)
P3 = 4;        % size of third array dimension (page size)
P4 = 12;       % size of fourth array dimension
A = rand(M,K,P1,1,P3,'gpuArray');
B = rand(K,N,1,P2,P3,P4,'gpuArray');

调用 pagefunmtimes 函数应用到这两个数组的每一页。

C = pagefun(@mtimes,A,B);
s = size(C)    % M-by-N-by-P1-by-P2-by-P3-by-P4
s =
    3     2    10    17     4    12

此代码展示了 pagefun 函数的另一个类似用例。

M = 300;       % output number of rows
K = 500;       % matrix multiply inner dimension
N = 1000;      % output number of columns
P = 200;       % number of pages
A = rand(M,K,'gpuArray');   
B = rand(K,N,P,'gpuArray');
C = pagefun(@mtimes,A,B);
s = size(C)    % returns M-by-N-by-P 
s =
    300        1000         200

输入参数

全部折叠

应用于每个输入页面的函数,指定为函数句柄。对于每个输出参量,FUN 每次调用时都必须返回同一类的值。

FUN 支持的值包括:

  • 大多数元素分布式数组和 GPU 数组函数

  • @conv

  • @conv2

  • @ctranspose

  • @fliplr

  • @flipud

  • @inv

  • @mldivide

  • @mrdivide

  • @mtimes

  • @norm

  • @qr - 对于 GPU 数组,语法 [__] = pagefun(@qr,__) 仅支持一个输入数组,不支持返回置换矩阵

  • @rot90

  • @svd - 对于 GPU 数组,每页的行和列大小不得大于 32×32

  • @transpose

  • @tril

  • @triu

如果输入是分布式数组,则 FUN 支持的值还包括:

  • @lu

输入数组,指定为分布式或 GPU 数组。

输入数组,指定为分布式数组、GPU 数组或数组。至少一个输入 B1,...,Bn 必须是分布式或 GPU 数组。不支持同时使用分布式和 GPU 数组作为输入。在评估函数之前,存储在 CPU 内存中的每个数组都会转换为分布式或 GPU 数组。如果您计划使用同一个数组对 pagefun 进行多次调用,则首先将该数组转换为分布式或 GPU 数组会更有效。

输出参量

全部折叠

输出数组,以分布式或 GPU 数组形式返回。

扩展功能

版本历史记录

在 R2013b 中推出

另请参阅

| |