Сотни функций в MATLAB® и другие тулбоксы запускаются автоматически на графическом процессоре, если вы поставляете gpuArray
аргумент.
A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]); e = eig(A);
Всякий раз, когда вы вызываете любую из этих функций с по крайней мере одним gpuArray в качестве входного параметра данных, функция выполняется на графическом процессоре. Функция генерирует в результате gpuArray, если только возврат данных MATLAB не является более подходящим (для примера, size
). Можно смешать входы с использованием как gpuArray, так и массивов MATLAB в одном вызове функции. Чтобы узнать больше о том, когда функция запускается на графическом процессоре или центральном процессоре, смотрите Специальные условия для входов gpuArray. Функции, поддерживающие графический процессор, включают дискретное преобразование Фурье (fft
), матричное умножение (mtimes
), левое матричное деление (mldivide
), и сотни других. Для получения дополнительной информации см. раздел Проверка функций, поддерживаемых графическим процессором.
Если функция MATLAB имеет поддержку для gpuArrays, можно проконсультироваться с дополнительной информацией об использовании графического процессора на ее странице функции. См. GPU Arrays в разделе Extended Capabilities в конце страницы функции.
Совет
Отфильтрованный список функций MATLAB, поддерживающих массивы GPU, см. в Списке функций (GPU-массивы).
Несколько тулбоксов MATLAB включают функции со встроенной поддержкой графический процессор. Чтобы просмотреть списки всех функций в этих тулбоксах, поддерживающих gpuArrays, используйте ссылки в следующей таблице. Функции в списках с предупреждающими индикаторами имеют ограничения или указания по применению, характерные для выполнения функции на графическом процессоре. Проверить указания по применению и ограничения можно в разделе Extended Capabilities страницы с описанием функции. Для получения информации об обновлениях отдельных функций, поддерживающих графический процессор, см. примечания к релизу.
Имя тулбокса | Список функций с поддержкой gpuArray | Документация для конкретного графического процессора |
---|---|---|
MATLAB | Функции с поддержкой gpuArray | |
Statistics and Machine Learning Toolbox™ | Функции с поддержкой gpuArray (Statistics and Machine Learning Toolbox) | |
Image Processing Toolbox™ | Функции с поддержкой gpuArray (Image Processing Toolbox) | Вычисление графического процессора (набор Image Processing Toolbox) |
Deep Learning Toolbox™ |
Функции с поддержкой gpuArray (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) |
Вы можете просматривать поддерживаемые графическим процессором функции из всех MathWorks® продукты по следующей ссылке: функции, поддерживаемые графическим процессором. Также можно фильтровать по продукту. На панели Help нажмите Functions. В списке функций перейдите на левую панель, чтобы выбрать продукт, например, MATLAB. В нижней части левой панели выберите GPU Arrays. Если вы выбираете продукт, который не имеет функций с поддержкой GPU, то GPU Arrays фильтр недоступен.
Для многих функций в Deep Learning Toolbox поддержка GPU происходит автоматически, если у вас есть подходящие графический процессор и Parallel Computing Toolbox™. Вам не нужно преобразовывать свои данные в gpuArray. Ниже приведен неисчерпывающий список функций, которые по умолчанию запуск на графическом процессоре при наличии.
trainNetwork
(Deep Learning Toolbox)
predict
(Deep Learning Toolbox)
predictAndUpdateState
(Deep Learning Toolbox)
classify
(Deep Learning Toolbox)
classifyAndUpdateState
(Deep Learning Toolbox)
activations
(Deep Learning Toolbox)
Для получения дополнительной информации об автоматической поддержке GPU в Deep Learning Toolbox, смотрите Глубокое Обучение с Большими Данными на графических процессорах и в Parallel (Deep Learning Toolbox).
Для расширенных сетей и рабочих процессов, которые используют сети, определенные как dlnetwork
(Deep Learning Toolbox) объекты или функции модели, преобразуйте ваши данные в gpuArray. Используйте функции с поддержкой gpuArray (Deep Learning Toolbox), чтобы запустить пользовательские циклы обучения или предсказание на графическом процессоре.
Если у вас есть графический процессор, то MATLAB автоматически использует его для расчетов GPU. Вы можете проверить свой графический процессор, используя gpuDevice
функция. Если у вас есть несколько графических процессоров, то можно использовать gpuDevice
для выбора одного из них или использования нескольких графических процессоров с параллельным пулом. Для получения примера смотрите Идентифицируйте и выберите устройство GPU и используйте несколько графических процессоров в параллельном пуле. Чтобы проверить, поддерживается ли ваш графический процессор, см. раздел «Поддержка GPU по релизу».
Для глубокого обучения MATLAB обеспечивает автоматическую параллельную поддержку нескольких графических процессоров. Смотрите Глубокое Обучение с MATLAB на нескольких графических процессорах (Deep Learning Toolbox).
В этом примере показано, как использовать функции MATLAB с поддержкой GPU для работы с gpuArrays. Проверить свойства своего графического процессора можно с помощью gpuDevice
функция.
gpuDevice
ans = CUDADevice with properties: Name: 'GeForce GTX 1080' Index: 1 ComputeCapability: '6.1' SupportsDouble: 1 DriverVersion: 10.1000 ToolkitVersion: 10.1000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 8.5899e+09 AvailableMemory: 6.9012e+09 MultiprocessorCount: 20 ClockRateKHz: 1733500 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 DeviceSupported: 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 4 gpuArray
Для работы с gpuArrays используйте любую функцию MATLAB с поддержкой GPU. MATLAB автоматически запускает вычисления на графическом процессоре. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре. Например, используйте комбинацию diag
, expm
, mod
, round
, 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
В целом могут быть различия в результатах, если вы запускаете код на центральный процессор, из-за численной точности и алгоритмических различий между GPU и CPU. Ответы на CPU и GPU являются одинаково допустимыми приближениями с плавающей точкой к истинному аналитическому результату, подвергнутыми различному округлению во время расчетов. В этом примере результаты являются целыми числами и round
устраняет ошибки округления.
В этом примере показано, как заточить изображение с помощью функций gpuArrays и GPU.
Прочтите изображение и отправьте его на графический процессор с помощью 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 с поддержкой GPU для вычисления хорошо известной математической конструкции: набора Мандельброта. Проверьте свой графический процессор с помощью 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 4 gpuArray y 1x1000 4 gpuArray
Многие функции MATLAB поддерживают gpuArrays. Когда вы поставляете аргумент gpuArray в любую функцию с поддержкой GPU, функция запускается автоматически на графическом процессоре. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре. Создайте сложную сетку для алгоритма и создайте массив count
для результатов. Чтобы создать этот массив непосредственно на графическом процессоре, используйте ones
function, и задать '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
Следующие функции поддерживают разреженные gpuArrays.
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
Разреженные gpuArrays не поддерживают индексацию. Вместо этого используйте 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 |
Функции, поддерживающие графический процессор, выполняются на графическом процессоре только тогда, когда данные находятся на графическом процессоре. Например, следующий код запускается на графическом процессоре, потому что данные, первый вход, находится на графическом процессоре:
>> sum(gpuArray(magic(10)),2);
>> sum(magic(10),gpuArray(2));
MAGMA является библиотекой линейных алгебр- стандартных программ, которые используют преимущества графического процессора ускорения. Линейные алгебры, реализованные для gpuArrays в Parallel Computing Toolbox, используют MAGMA для достижения высокой эффективности и точности.