Примените функцию к каждой странице массива на графическом процессоре
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
:
Большинство поэлементных функций gpuArray, перечисленных в Запущенных функциях 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