主要内容

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

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

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

示例

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

示例

全部折叠

创建两个 GPU 数组 A 和 B。A 是二维数组(矩阵),B 是三维数组,其中前两个维度与矩阵相同,但第三个维度代表元素的页面

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");

使用 pagefun 对数组 A 和 B 的每个页面应用矩阵乘法 (mtimes)。

C = pagefun(@mtimes,A,B);
s = size(C)    % returns M-by-N-by-P 
s = 1×3

         300        1000         200

创建两个更高维的数组 D 和 E。D 是五维数组,E 是六维数组。

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
D = rand(M,K,P1,1,P3,"gpuArray");
E = rand(K,N,1,P2,P3,P4,"gpuArray");

使用 pagefun 对数组 D 和 E 的每个页面应用矩阵乘法 (mtimes)。大小为 1 的维度会隐式扩展,以匹配该维中其他数组的大小。

F = pagefun(@mtimes,D,E);
s = size(F)    % M-by-N-by-P1-by-P2-by-P3-by-P4
s = 1×6

     3     2    10    17     4    12

输入参数

全部折叠

应用于每个输入页面的函数,指定为函数句柄。对于每个输出参量,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 中推出

另请参阅

| |