exponenta event banner

pagefun

Применение функции к каждой странице распределенного массива или gpuArray

Описание

A = pagefun(FUN,B) применяет функцию, указанную FUN на каждую страницу распределенного массива или gpuArray B. Результат A содержит каждую страницу результатов так, что A(:,:,I,J,...) = FUN(B(:,:,I,J,...)). A является распределенным массивом или gpuArray, в зависимости от типа массива 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, более эффективно сначала преобразовать этот массив в распределенный массив или gpuArray.

[A1,...,Am] = pagefun(FUN,___) возвращает несколько выходных массивов A1,...,Am когда функция FUN прибыль m выходные значения. pagefun требования FUN каждый раз с таким количеством выходов, какое имеется в вызове pagefun, то есть m времена. При звонке pagefun с большим количеством выходных аргументов, чем поддерживается FUN, MATLAB ® генерирует ошибку .FUN может возвращать выходные аргументы, имеющие различные типы данных, но тип данных каждого вывода должен быть одинаковым каждый раз FUN вызывается.

Примеры

свернуть все

В этом примере показано, как использовать pagefun для применения mtimes функция для каждой страницы двух массивов GPU, B и C.

Создайте два массива графических процессоров, 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 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');

Звонить pagefun для применения mtimes для каждой страницы этих двух массивов.

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 включают:

  • Большинство функций распределенного массива по элементам и gpuArray

  • @ctranspose

  • @fliplr

  • @flipud

  • @inv

  • @mldivide

  • @mrdivide

  • @mtimes

  • @rot90

  • @transpose

  • @tril

  • @triu

Если входы являются распределенными массивами, поддерживаемые значения для FUN также включают:

  • @lu

  • @qr

  • @norm

Входной массив, заданный как распределенный массив или gpuArray.

Входные массивы, указанные как распределенные массивы, gpuArrays или массивы. По крайней мере, один из входов B1,...,Bn, должен быть распределенным массивом или gpuArray. Использование распределенного массива и gpuArray в качестве входных данных не поддерживается. Каждый массив, который хранится в памяти ЦП, преобразуется в распределенный массив или gpuArray перед оценкой функции. Если планируется выполнить несколько вызовов pagefun с тем же массивом более эффективно сначала преобразовать этот массив в распределенный массив или gpuArray.

Выходные аргументы

свернуть все

Выходной массив, возвращаемый как распределенный массив или gpuArray.

См. также

| | |

Представлен в R2013b