Main Content

pagefun

分散配列または GPU 配列の各ページに関数を適用

説明

A = pagefun(FUN,B) は、FUN で指定された関数を分散配列または GPU 配列 B の各ページに適用します。結果 A は結果の各ページを含み、A(:,:,I,J,...) = FUN(B(:,:,I,J,...)) のようになります。A は、B の配列タイプに応じて分散配列または GPU 配列になります。FUN は 2 次元の入力引数を取る関数のハンドルです。

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 配列に変換するとより効率的になります。

[A1,...,Am] = pagefun(FUN,___) は、関数 FUNm 個の出力値を返す場合に複数の出力配列 A1,...,Am を返します。pagefun は毎回、pagefun の呼び出しにおける出力の数と同じ回数、すなわち mFUN を呼び出します。FUN でサポートされる数より多くの出力引数を指定して pagefun を呼び出した場合、MATLAB® はエラーを生成します。FUN は異なるデータ型をもつ出力引数を返すことができますが、FUN の各呼び出しにおいて、各出力のデータ型は同じでなければなりません。

すべて折りたたむ

この例では、pagefun を使用して 2 つの GPU 配列 B および C の各ページに関数 mtimes を適用する方法を説明します。

2 つの GPU 配列 B および C を作成します。

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

pagefun を呼び出して、関数 mtimes をこれら 2 つの配列の各ページに適用します。

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,__) では 1 つの入力配列のみがサポートされ、置換行列を返すことはサポートされません。

  • @rot90

  • @svd — GPU 配列の場合、各ページの行および列のサイズを 32 行 32 列より大きくしてはなりません。

  • @transpose

  • @tril

  • @triu

入力が分散配列である場合、サポートされる FUN の値には以下も含まれます。

  • @lu

入力配列。分散配列または GPU 配列として指定します。

入力配列。分散配列、GPU 配列、または配列として指定します。入力 B1,...,Bn の少なくとも 1 つが分散配列または GPU 配列でなければなりません。分散配列と GPU 配列の両方を入力として使用することはサポートされていません。CPU メモリに格納された各配列は、関数が評価される前に分散配列または GPU 配列に変換されます。同じ配列を指定して pagefun を複数回呼び出す場合は、まずその配列を分散配列または GPU 配列に変換するとより効率的になります。

出力引数

すべて折りたたむ

出力配列。分散配列または GPU 配列として返されます。

拡張機能

バージョン履歴

R2013b で導入