gpuArray

Массив сохранен на графическом процессоре

Описание

gpuArray объект представляет массив, сохраненный в памяти графического процессора. Большое количество функций в MATLAB® и в других тулбоксах поддерживают gpuArray объекты, позволяя вам запустить ваш код по графическим процессорам с минимальными изменениями в коде. Работать с gpuArray объекты, используйте любой gpuArray- активированная функция MATLAB, такая как fftmtimes, * или mldivide. Найти полный список gpuArray- активированные функции в MATLAB и в других тулбоксах, смотрите поддержанные графическим процессором функции. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре.

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

Примечание

Можно загрузить файлы MAT, содержащие gpuArray данные как массивы в оперативной памяти, когда графический процессор не доступен. gpuArray объект, загруженный без графического процессора, ограничивается, и вы не можете использовать его для расчетов. Использовать gpuArray объект, загруженный без графического процессора, получите использование содержимого gather.

Создание

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

Синтаксис

Описание

пример

G = gpuArray(X) копирует массив X к графическому процессору и возвращает gpuArray объект.

Входные параметры

развернуть все

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

Можно также передать разреженные массивы графическому процессору. gpuArray поддержки только разреженные массивы с двойной точностью.

Пример: G = gpuArray(magic(3));

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного числа: Да

Функции объекта

arrayfunПримените функцию к каждому элементу массива на графическом процессоре
gatherПередайте распределенный массив или gpuArray к локальной рабочей области
pagefunПримените функцию к каждой странице распределенного массива или gpuArray

Существует несколько методов для исследования характеристик gpuArray объект. Большинство ведет себя как функции MATLAB того же имени.

isgpuarrayОпределите, является ли введенный gpuArray
existsOnGPUОпределите, доступны ли gpuArray или CUDAKernel на графическом процессоре
isUnderlyingTypeОпределите, задал ли введенный базовый тип данных
ndimsКоличество измерений массива
sizeРазмер массивов
underlyingTypeТип базовых данных, определяющих поведение массивов

Несколько тулбоксов 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 не доступен.

Примеры

свернуть все

Чтобы передать данные с центрального процессора на графический процессор, используйте gpuArray функция.

Создайте массив X.

X = [1,2,3];

Передайте X к графическому процессору.

G = gpuArray(X);

Проверяйте, что данные находятся на графическом процессоре.

isgpuarray(G)
ans = logical
   1

Вычислите поэлементный квадрат массива G.

GSq = G.^2;

Передайте результат GSq назад к центральному процессору.

XSq = gather(GSq)
XSq = 1×3

     1     4     9

Проверяйте, что данные не находятся на графическом процессоре.

isgpuarray(XSq)
ans = logical
   0

Можно создать данные непосредственно по графическому процессору непосредственно при помощи некоторых функций MATLAB и определения опции "gpuArray".

Создайте массив случайных чисел непосредственно на графическом процессоре.

G = rand(1,3,"gpuArray")
G =

    0.3640    0.5421    0.6543

Проверяйте, что выход хранится на графическом процессоре.

isgpuarray(G)
ans = logical
   1

В этом примере показано, как использовать 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 устраняет ошибки округления.

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

Задайте число точек к выборке. Точки выборки в области функции, интервал [-1,1] в обоих x и координаты y, путем создания случайных точек с rand функция. Чтобы создать случайный массив непосредственно на графическом процессоре, используйте rand функционируйте и задайте "gpuArray". Для получения дополнительной информации смотрите, Устанавливают Массивы на графическом процессоре.

n = 1e6;
x = 2*rand(n,1,"gpuArray")-1;
y = 2*rand(n,1,"gpuArray")-1;

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

f = x.^2 + y.^2 <= 1;
result = 4*1/n*f*ones(n,1,"gpuArray")
result =

    3.1403

Советы

  • Если вам нужна лучшая эффективность, или если функция не доступна на графическом процессоре, gpuArray поддержки следующие опции:

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

    • Запускать Код С++, содержащий CUDA® код устройства или вызовы библиотеки, используйте MEX-функцию. Для получения дополнительной информации смотрите, что MEX-функции Запуска Содержат Код CUDA.

    • Чтобы запустить существующие ядра графического процессора, написанные в C++ CUDA, используйте интерфейс MATLAB CUDAKernel. Для получения дополнительной информации смотрите Запуск CUDA или Код PTX по графическому процессору.

    • Чтобы сгенерировать код CUDA из кода MATLAB, используйте GPU Coder™. Для получения дополнительной информации смотрите Начало работы с GPU Coder (GPU Coder).

  • Можно управлять потоком случайных чисел на использовании графического процессора gpurng.

  • Ни одно из следующего не может превысить intmax("int32"):

    • Число элементов плотного массива.

    • Количество ненулевых элементов разреженного массива.

    • Размер в любой данной размерности. Например, zeros(0,3e9,"gpuArray") не позволен.

Альтернативы

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

eye(___, "gpuArray")true(___, "gpuArray")
false(___, "gpuArray")zeros(___, "gpuArray")
Inf(___, "gpuArray")gpuArray.colon
NaN(___,"gpuArray")gpuArray.freqspace
ones(___,"gpuArray")gpuArray.linspace
rand(___,"gpuArray")gpuArray.logspace
randi(___,"gpuArray")gpuArray.speye
randn(___,"gpuArray") 
Представленный в R2010b