Запустите функции MATLAB на графическом процессоре

Функции MATLAB с gpuArray Аргументы

Сотни функций в MATLAB® и другие тулбоксы запускаются автоматически на графическом процессоре, если вы предоставляете a gpuArray аргумент.

A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]);
e = eig(A);

Каждый раз, когда вы вызываете любую из этих функций по крайней мере с одним gpuArray в качестве аргумента ввода данных функция выполняется на графическом процессоре. Функция генерирует gpuArray как результат, если возврат данных MATLAB не является более соответствующим (например, size). Можно смешать входные параметры с помощью обоих gpuArray и массивы MATLAB в том же вызове функции. Чтобы узнать больше, когда функция будет работать на графическом процессоре или центральном процессоре, смотрите Особые условия для Входных параметров gpuArray. gpuArray- активированные функции включают дискретное преобразование Фурье (fft), умножение матриц (mtimes), оставленный матричное деление (mldivide), и сотни других. Для получения дополнительной информации смотрите Проверку gpuArray-поддерживаемые Функции.

Проверяйте gpuArray- Поддерживаемые Функции

Если функция MATLAB имеет поддержку gpuArray объекты, можно консультироваться с дополнительной информацией об использовании графического процессора на ее функциональной странице. Смотрите GPU Arrays в разделе Extended Capabilities в конце функциональной страницы.

Совет

Для отфильтрованного списка функций MATLAB та поддержка gpuArray объекты, см. Функциональный Список (массивы графического процессора).

Несколько тулбоксов MATLAB включают функции со встроенным gpuArray поддержка. Просмотреть списки всех функций в этих тулбоксах та поддержка gpuArray объекты, используйте ссылки в следующей таблице. Функции в списках с информационными индикаторами имеют ограничения или указания по применению, характерные для выполнения функции на графическом процессоре. Можно проверять указания и ограничения по применению в раздел Extended Capabilities страницы ссылки на функцию. Для получения информации об обновлениях отдельного gpuArray- активированные функции, смотрите информацию о релизах.

ToolboxName Список функций с gpuArray ПоддержкаСпецифичная для графического процессора документация
MATLABФункции с gpuArray поддержка 
Statistics and Machine Learning Toolbox™Функции с gpuArray поддержите (Statistics and Machine Learning Toolbox)Анализируйте и данные модели на графическом процессоре (Statistics and Machine Learning Toolbox)
Image Processing Toolbox™Функции с gpuArray поддержите (Image Processing Toolbox)Графический процессор, вычислительный (Image Processing Toolbox)
Deep Learning Toolbox™

Функции с gpuArray поддержите (Deep Learning Toolbox)

* (см. также Глубокое обучение для графических процессоров),

Увеличьте глубокое обучение параллельно на графических процессорах, и в облаке (Deep Learning Toolbox)

Глубокое обучение для MATLAB на нескольких графических процессорах (Deep Learning Toolbox)

Computer Vision Toolbox™Функции с gpuArray поддержите (Computer Vision Toolbox)Генерация кода графического процессора и ускорение (Computer Vision Toolbox)
Communications Toolbox™Функции с gpuArray поддержите (Communications Toolbox)Генерация кода и ускоряющая поддержка (Communications Toolbox)
Signal Processing Toolbox™Функции с gpuArray поддержите (Signal Processing Toolbox)Генерация кода и поддержка графического процессора (Signal Processing Toolbox)
Audio Toolbox™Функции с gpuArray поддержите (Audio Toolbox)Генерация кода и поддержка графического процессора (Audio Toolbox)
Wavelet Toolbox™Функции с gpuArray поддержите (Wavelet Toolbox)Генерация кода и поддержка графического процессора (Wavelet Toolbox)
Curve Fitting Toolbox™Функции с gpuArray поддержите (Curve Fitting Toolbox) 

Можно просмотреть gpuArray- поддерживаемые функции от всего MathWorks® продукты в следующей ссылке: gpuArray- поддерживаемые функции. В качестве альтернативы можно отфильтровать продуктом. На панели Help нажмите Functions. В функциональном списке просмотрите левую панель, чтобы выбрать продукт, например, MATLAB. В нижней части левой панели выберите GPU Arrays. Если вы выбираете продукт, который не имеет gpuArray- активированные функции, затем фильтр GPU Arrays не доступен.

Глубокое обучение для графических процессоров

Для многих функций в Deep Learning Toolbox поддержка графического процессора является автоматической, если у вас есть подходящий графический процессор и Parallel Computing Toolbox™. Вы не должны преобразовывать свои данные в gpuArray. Следующее является неисчерпывающим списком функций, которые, по умолчанию, работают на графическом процессоре при наличии.

Для получения дополнительной информации об автоматической поддержке графического процессора в Deep Learning Toolbox, смотрите, Увеличивают Глубокое обучение параллельно, на графических процессорах, и в Облаке (Deep Learning Toolbox).

Для усовершенствованных сетей и рабочих процессов, которые используют сети, заданные в качестве dlnetwork (Deep Learning Toolbox) объекты или функции модели, преобразуйте свои данные в gpuArray. Используйте функции с gpuArray поддержите (Deep Learning Toolbox), чтобы запустить пользовательские учебные циклы или предсказание на графическом процессоре.

Проверяйте или выберите GPU

Если у вас есть графический процессор, то MATLAB автоматически использует его для расчетов графического процессора. Можно проверять и выбрать графический процессор с помощью gpuDevice функция. Если у вас есть несколько графических процессоров, то можно использовать gpuDeviceTable исследовать свойства всех графических процессоров, обнаруженных в вашей системе. Можно использовать gpuDevice выбрать одного из них или использовать несколько графических процессоров с параллельным пулом. Для примера смотрите, Идентифицируют и Выбирают GPU Device и Use Multiple GPUs in Parallel Pool. Чтобы проверять, поддерживается ли ваш графический процессор, смотрите Поддержку графического процессора Релизом.

Для глубокого обучения MATLAB оказывает автоматическую параллельную поддержку для нескольких графических процессоров. Смотрите Глубокое обучение для MATLAB на Нескольких графических процессорах (Deep Learning Toolbox).

Используйте функции MATLAB с помощью графического процессора

В этом примере показано, как использовать gpuArray- активированные функции MATLAB, чтобы действовать с gpuArray объекты. Можно проверять свойства графического процессора с помощью gpuDevice функция.

gpuDevice
ans = 
  CUDADevice with properties:

                      Name: 'TITAN RTX'
                     Index: 1
         ComputeCapability: '7.5'
            SupportsDouble: 1
             DriverVersion: 11.2000
            ToolkitVersion: 11
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 2.5770e+10
           AvailableMemory: 2.4177e+10
       MultiprocessorCount: 72
              ClockRateKHz: 1770000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

Создайте вектор-строку, который повторяет значения от-15 до 15. Передать его графическому процессору и создать gpuArray объект, используйте gpuArray функция.

X = [-15:15 0 -15:15 0 -15:15];
gpuX = gpuArray(X);
whos gpuX
  Name      Size            Bytes  Class       Attributes

  gpuX      1x95              760  gpuArray              

Действовать с gpuArray объекты, используйте любой gpuArray- активированная функция MATLAB. MATLAB автоматически выполняет вычисления на графическом процессоре. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре. Например, используйте diagexpmmodвокругabs, и fliplr вместе.

gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1));
gpuM = mod(round(abs(gpuE)),2);
gpuF = gpuM + fliplr(gpuM);

Постройте график результатов.

imagesc(gpuF);
colormap(flip(gray));

Если необходимо возвратить данные из графического процессора, используйте gather. Возвращение данных к центральному процессору может быть дорогостоящим, и является обычно не необходимым, если вы не должны использовать свой результат с функциями, которые не поддерживают gpuArray.

result = gather(gpuF);
whos result
  Name         Size            Bytes  Class     Attributes

  result      96x96            73728  double              

В общем случае под управлением код по центральному процессору и графическому процессору может привести к различным результатам из-за числовой точности и алгоритмических различий между графическим процессором и центральным процессором. Ответы от центрального процессора и графического процессора являются оба одинаково допустимыми приближениями с плавающей точкой к истинному аналитическому результату, будучи подвергнутым различному поведению округления во время расчета. В этом примере результатами являются целые числа и round устраняет ошибки округления.

Увеличьте резкость изображения Используя графический процессор

В этом примере показано, как увеличить резкость изображения с помощью gpuArrays и поддерживающих графический процессор функций.

Считайте изображение и отправьте его в графический процессор с помощью gpuArray функция.

image = gpuArray(imread('peppers.png'));

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

dimage = im2double(image); 
gradient = convn(dimage,ones(3)./9,'same') - convn(dimage,ones(5)./25,'same');
amount = 5;
sharpened = dimage + amount.*gradient;

Измените размер, постройте и сравните исходные и увеличенные резкость изображения.

imshow(imresize([dimage, sharpened],0.7));
title('Original image (left) vs sharpened image (right)');

Вычислите Множество Мандельброта с помощью поддерживающих графический процессор Функций

В этом примере показано, как использовать поддерживающие графический процессор функции MATLAB, чтобы вычислить известную математическую конструкцию: Множество Мандельброта. Проверяйте свой графический процессор с помощью gpuDevice функция.

Задайте параметры. Алгоритм Мандельброта выполняет итерации по сетке действительных и мнимых частей. Следующий код задает количество итераций, размера сетки и пределов сетки.

maxIterations = 500;
gridSize = 1000;
xlim = [-0.748766713922161, -0.748766707771757];
ylim = [ 0.123640844894862,  0.123640851045266]; 

Можно использовать gpuArray функционируйте, чтобы передать данные графическому процессору и создать gpuArray, или можно создать массив непосредственно на графическом процессоре. gpuArray обеспечивает версии графического процессора многих функций, которые можно использовать, чтобы создать массивы данных, такие как linspace. Для получения дополнительной информации смотрите, Создают Массивы графического процессора Непосредственно.

x = gpuArray.linspace(xlim(1),xlim(2),gridSize);
y = gpuArray.linspace(ylim(1),ylim(2),gridSize);
whos x y
  Name      Size              Bytes  Class       Attributes

  x         1x1000             8000  gpuArray              
  y         1x1000             8000  gpuArray              

Много функций MATLAB поддерживают gpuArrays. Когда вы предоставляете gpuArray аргумент к любой поддерживающей графический процессор функции, функция запускается автоматически на графическом процессоре. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре. Создайте комплексную сетку для алгоритма и создайте массив count для результатов. Чтобы создать этот массив непосредственно на графическом процессоре, используйте ones функция, и задает 'gpuArray'.

[xGrid,yGrid] = meshgrid(x,y);
z0 = complex(xGrid,yGrid);
count = ones(size(z0),'gpuArray');

Следующий код реализует алгоритм Мандельброта с помощью поддерживающих графический процессор функций. Поскольку код использует gpuArrays, вычисления происходят на графическом процессоре.

z = z0;
for n = 0:maxIterations
    z = z.*z + z0;
    inside = abs(z) <= 2;
    count = count + inside;
end
count = log(count);

Когда расчеты сделаны, строят результаты.

imagesc(x,y,count)
colormap([jet();flipud(jet());0 0 0]);
axis off

Работа с разреженными массивами на графическом процессоре

Следующие функции поддерживают разреженный gpuArray объекты.

abs
acos
acosd
acosh
acot
acotd
acoth
acsc
acscd
acsch
angle
asec
asecd
asech
asin
asind
asinh
atan
atand
atanh
bicg
bicgstab
ceil
cgs
classUnderlying
conj
cos
cosd
cosh
cospi
cot
cotd
coth
csc
cscd
csch
ctranspose
deg2rad
diag
end
eps
exp
expint
expm1
find
fix
floor
full
gmres
gpuArray.speye
imag
isaUnderlying
isdiag
isempty
isequal
isequaln
isfinite
isfloat
isinteger
islogical
isnumeric
isreal
issparse
istril
istriu
isUnderlyingType
length
log
log2
log10
log1p
lsqr
minus
mtimes
mustBeUnderlyingType
ndims
nextpow2
nnz
nonzeros
norm
numel
nzmax
pcg
plus
qmr
rad2deg
real
reallog
realsqrt
round
sec
secd
sech
sign
sin
sind
sinh
sinpi
size
sparse
spfun
spones
sprandsym
sqrt
sum
tan
tand
tanh
tfqmr
times (.*)
trace
transpose
tril
triu
uminus
underlyingType
uplus 
  

Можно создать разреженный gpuArray любой путем вызова sparse с gpuArray введите, или путем вызова gpuArray с разреженным входом. Например,

x = [0 1 0 0 0; 0 0 0 0 1]
     0     1     0     0     0
     0     0     0     0     1
s = sparse(x)
   (1,2)        1
   (2,5)        1
g = gpuArray(s);   % g is a sparse gpuArray
gt = transpose(g); % gt is a sparse gpuArray
f = full(gt)       % f is a full gpuArray
     0     0
     1     0
     0     0
     0     0
     0     1

Разреженный gpuArray объекты не поддерживают индексацию. Вместо этого используйте find определять местоположение ненулевых элементов массива и их индексов строки и столбца. Затем замените значения, вы хотите и создаете новый разреженный gpuArray.

Работа с комплексными числами на графическом процессоре

Если выход функции, работающей на графическом процессоре, мог бы потенциально быть комплексным, необходимо явным образом задать его входные параметры как комплекс. Это применяется к gpuArray или к функциям называется в коде, запущенном arrayfun.

Например, при создании gpuArray та сила имеет отрицательные элементы, использует G = gpuArray(complex(p)), затем можно успешно выполнить sqrt(G).

Или, в функции передал arrayfun, если x вектор из вещественных чисел, и некоторые элементы имеют отрицательные величины, sqrt(x) генерирует ошибку; вместо этого необходимо вызвать sqrt(complex(x)).

Если результатом является gpuArray из комплексных данных и всех мнимых частей нуль, эти части сохраняются, и данные остаются комплексными. Это могло оказать влияние при использовании sort, isreal, и так далее.

В следующей таблице перечислены функции, которые могут возвратить комплексные данные, наряду с входным диапазоном, по которому выход остается действительным.

ФункцияВходной диапазон для действительного Выхода
acos(x)abs(x) <= 1
acosh(x)x >= 1
acoth(x)abs(x) >= 1
acsc(x)abs(x) >= 1
asec(x)abs(x) >= 1
asech(x)0 <= x <= 1
asin(x)abs(x) <= 1
atanh(x)abs(x) <= 1
log(x)x >= 0
log1p(x)x >= -1
log10(x)x >= 0
log2(x)x >= 0
power(x,y)x >= 0
reallog(x)x >= 0
realsqrt(x)x >= 0
sqrt(x)x >= 0

Особые условия для Входных параметров gpuArray

Поддерживающие графический процессор функции работают на графическом процессоре только, когда данные находятся на графическом процессоре. Например, следующий код работает на графическом процессоре, потому что данные, первый вход, находятся на графическом процессоре:

>> sum(gpuArray(magic(10)),2);
Однако этот код не работает на графическом процессоре, потому что данные, первый вход, не находятся на графическом процессоре:
>> sum(magic(10),gpuArray(2));
Если ваш входной параметр gpuArray объекты содержат элементы, такие как размерности, масштабные коэффициенты или количество итераций, затем функция собирает их и вычисляет на центральном процессоре. Функции только работают на графическом процессоре, когда фактическими аргументами данных является gpuArray объекты.

Список благодарностей

MAGMA является библиотекой стандартных программ линейной алгебры, которые используют в своих интересах ускорение графического процессора. Функции линейной алгебры реализованы для gpuArray объекты в Parallel Computing Toolbox усиливают MAGMA, чтобы достигнуть высокой производительности и точности.

Смотрите также

|

Связанные примеры

Больше о