ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

pagefun

関数を GPU 上の配列内の各ページに適用する

構文

A = pagefun(FUN,B)
A = pagefun(FUN,B,C,...)
[A,B,...] = pagefun(FUN,C,...)

説明

pagefun は gpuArray の各ページで反復し、同じ関数を各ページに適用します。

A = pagefun(FUN,B) は、FUN で指定された関数を gpuArray B の各ページに適用し、結果を A(:,:,I,J,...) = FUN(B(:,:,I,J,...)) の形で gpuArray A に返します。FUN は 2 次元入力引数を受け入れる関数のハンドルです。

gather を使用して、配列を GPU から MATLAB ワークスペースに戻すことができます。

A = pagefun(FUN,B,C,...) は配列 BC などのページを入力引数として使用し、スカラー拡張を有効にして FUN を評価します。スカラーである入力ページ次元は同じ次元内の他の配列と同じサイズになるように実質的に複製され、A(:,:,I,J,...) = FUN(B(:,:,I,J,...), C(:,:,I,J,...),...) になります。BC などの入力のうち少なくとも 1 つは gpuArray でなければなりません。CPU メモリに格納される他のすべての入力が gpuArray に変換されてから、GPU で関数が呼び出されます。ある配列を pagefun の複数の呼び出しで使用する場合、その配列を gpuArray に変換してから pagefun の一連の呼び出しを実行する方が効率的です。B(:,:,I, J, ...)C(:,:,I, J, ...) などの入力ページはいずれも FUN の入出力に関するすべての要件を満たしていなければなりません。

[A,B,...] = pagefun(FUN,C,...) (FUN は複数の出力を返す関数のハンドル) は gpuArray AB などを返します。これらはいずれも FUN の出力引数の 1 つに対応しています。pagefunpagefun の呼び出しのすべての出力を使用して FUN を呼び出します。A の要素はすべて同じクラスでなければなりません。BA と異なるクラスにすることはできますが、B の要素はすべて同じクラスでなければなりません。他についても同様です。

FUN は呼び出されるたびに同じクラスの値を返さなければなりません。pagefun がページを計算する順序は指定されず、一定にはなりません。

FUN は MATLAB 言語で記述された (すなわち、組み込み関数でも MEX 関数でもない) 関数のハンドルでなければなりません。

現在、FUN でサポートされる値は次のとおりです。

  • 要素単位の gpuArray 関数の大部分。GPU での MATLAB 関数の実行および以下がその一覧です。

  • @ctranspose

  • @fliplr

  • @flipud

  • @inv

  • @mldivide

  • @mrdivide

  • @mtimes

  • @rot90

  • @transpose

M = 3;         % output number of rows
K = 6;         % matrix multiply inner dimension
N = 2;         % output number of columns
P1 = 10;       % size of first page dimension
P2 = 17;       % size of second page dimension
P3 = 4;        % size of third page dimension
P4 = 12;       % size of fourth page dimension
A = rand(M,K,P1,1,P3,'gpuArray');
B = rand(K,N,1,P2,P3,P4,'gpuArray');
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
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

R2013b で導入