Примените функцию к каждой странице массива на графическом процессоре
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 использование страниц массивов BC, и т.д., как входные параметры со скалярным включенным расширением. Любое из входных измерений страницы, которые являются скаляром, фактически реплицировано, чтобы совпадать с размером других массивов в той размерности так, чтобы A(:,:,I,J,...) = FUN(B(:,:,I,J,...), C(:,:,I,J,...),...). По крайней мере одни из входных параметров BC, и т.д. должен быть gpuArray. Любые другие входные параметры, сохраненные в памяти ЦП, преобразованы в gpuArray прежде, чем вызвать функцию на графическом процессоре. Если массив должен использоваться в нескольких различных pagefun вызовы, более эффективно преобразовать тот массив в gpuArray перед вашей серией pagefun вызовы. Входные страницы B(:,:,I, J, ...), C(:,:,I, J, ...), и т.д., должен удовлетворить всем требованиям ввода и вывода FUN.
[A,B,...] = pagefun(FUN,C,...), где FUN указатель на функцию, которая возвращает несколько выходных параметров, возвращает gpuArrays AB, и т.д., каждый соответствующий одному из выходных аргументов FUN. pagefun вызывает FUN со столькими же выходных параметров сколько существуют в вызове pagefun. Все элементы A должен быть тот же класс; B может быть различный класс от A, но все элементы B должен иметь тот же класс; и т.д.
FUN должны возвращаемые значения того же класса каждый раз, когда это называется. Порядок, в который pagefun вычисляет страницы, не задан и не должен быть использован.
FUN должен быть указатель на функцию, которая написана в языке MATLAB (т.е. не встроенная функция или MEX-функция).
В настоящее время поддерживаемые значения для FUN :
Большая часть поэлементного gpuArray функционирует и следующие функции:
@ctranspose
@fliplr
@flipud
@inv
@mldivide
@mrdivide
@mtimes
@rot90
@transpose
@tril
@triu
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 12M = 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