pagefun

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

Синтаксис

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

Описание

pagefun выполняет итерации по страницам gpuArray, применяя ту же функцию к каждой странице.

A = pagefun(FUN,B) применяет функцию, заданную FUN к каждой странице gpuArray B, и возвращает результаты в gpuArray A, таком что A(:,:,I,J,...) = FUN(B(:,:,I,J,...)). FUN является указателем на функцию, которая берет двумерный входной параметр.

Можно использовать gather, чтобы получить массив из графического процессора назад к рабочему пространству MATLAB.

A = pagefun(FUN,B,C,...) оценивает страницы использования FUN массивов B, C, и т.д., как входные параметры со скалярным включенным расширением. Любое из входных измерений страницы, которые являются скаляром, фактически реплицировано, чтобы совпадать с размером других массивов в той размерности так, чтобы A(:,:,I,J,...) = FUN(B(:,:,I,J,...), C(:,:,I,J,...),...). По крайней мере одни из входных параметров B, C, и т.д. должны быть gpuArray. Любые другие входные параметры, сохраненные в памяти ЦП, преобразованы в gpuArray прежде, чем вызвать функцию на графическом процессоре. Если массив должен использоваться в нескольких различных вызовах pagefun, более эффективно преобразовать тот массив в gpuArray перед вашей серией вызовов pagefun. Входные страницы B(:,:,I, J, ...), C(:,:,I, J, ...), и т.д., должны удовлетворить все требования ввода и вывода FUN.

[A,B,...] = pagefun(FUN,C,...), то, где FUN является указателем на функцию, которая возвращает несколько выходных параметров, возвращает gpuArrays A, B, и т.д., каждый соответствующий одному из выходных аргументов FUN. pagefun вызывает FUN со столькими же выходных параметров, сколько существует в вызове pagefun. Все элементы A должны быть тем же классом; B может быть различным классом от A, но все элементы B должны иметь тот же класс; и т.д.

FUN должен возвращаемые значения того же класса каждый раз, когда это называется. Порядок, в котором pagefun вычисляет страницы, не задают и нельзя полагаться.

FUN должен быть указателем на функцию, которая написана в языке MATLAB (т.е. не встроенная функция или MEX-функция).

В настоящее время поддерживаемые значения для FUN:

Примеры

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