gpuDevice

Запрос или выбор графического процессора

Описание

A GPUDevice объект представляет графический модуль (GPU) на вашем компьютере. Для запуска MATLAB можно использовать графический процессор® код, который поддерживает gpuArray переменные или выполнение ядра CUDA с помощью CUDAKernel объекты.

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

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

Создание

Описание

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

пример

D = gpuDevice возвращает GPUDevice объект, представляющий выбранное на данный момент устройство. Если в данный момент нет выбранного устройства, gpuDevice выбирает устройство по умолчанию и возвращает GPUDevice объект, представляющий это устройство без его очистки.

пример

D = gpuDevice(indx) выбирает устройство GPU, заданное индексом indx. Если указанный графический процессор не поддерживается, возникает ошибка. Этот синтаксис сбрасывает указанное устройство и очищает его память, даже если устройство уже выбрано (эквивалентно reset функция). Все переменные рабочей области, представляющие gpuArray или CUDAKernel переменные являются недопустимыми и должны быть удалены из рабочей области или переопределены.

пример

gpuDevice([]), с пустым аргументом (в отличие от без аргумента), отменяет выбор графического процессора и очищает его память от gpuArray и CUDAKernel переменные. Этот синтаксис не оставляет графический процессор, выбранное в качестве текущего устройства.

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

расширить все

Индекс графического процессора, заданный в виде целого числа в области значений 1 на gpuDeviceCount.

Пример: gpuDevice(1);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Свойства

расширить все

Это свойство доступно только для чтения.

Имя графического процессора, заданное как символьный массив. Имя, присвоенное устройству, определяется из модели устройства GPU.

Это свойство доступно только для чтения.

Индекс графического процессора, заданный в виде целого числа в области значений 1 на gpuDeviceCount. Используйте этот индекс для выбора конкретного устройства графического процессора.

Это свойство доступно только для чтения.

Вычислительные возможности графического процессора, заданные как символьный массив. Чтобы использовать выбранный графический процессор в MATLAB, ComputeCapability должна соответствовать требуемой спецификации в Поддержке графический процессор по Релизу.

Это свойство доступно только для чтения.

Флаг для поддержки операций двойной точности, заданный как логические значения 0 для false или 1 для true.

Это свойство доступно только для чтения.

Используемая версия драйвера GPU, заданная в виде скалярного значения. Чтобы использовать выбранный графический процессор в MATLAB, DriverVersion должна соответствовать требуемой спецификации в Поддержке графический процессор по Релизу.

Это свойство доступно только для чтения.

Версия набора инструментов CUDA, используемая текущим релизом MATLAB, задается в виде скалярного значения.

Это свойство доступно только для чтения.

Максимальное поддерживаемое количество потоков на блок во время выполнения CUDAKernel, заданное в виде скалярного значения.

Пример: 1024

Это свойство доступно только для чтения.

Максимальное поддерживаемое количество общей памяти, которое блок потока может использовать во время выполнения CUDAKernel, заданное в виде скалярного значения.

Пример: 49152

Это свойство доступно только для чтения.

Максимальный размер в каждой размерности для блока резьбы, заданный как вектор. Каждая размерность блока резьбы не должен превышать эти размерности. Кроме того, продукт размера блока резьбы не должно превышать MaxThreadsPerBlock.

Это свойство доступно только для чтения.

Максимальный размер сетки блоков резьбы, заданный как вектор.

Это свойство доступно только для чтения.

Количество одновременно выполняемых потоков, заданное в виде скалярного значения.

Это свойство доступно только для чтения.

Общая память (в байтах) на устройстве, заданная в виде скалярного значения.

Это свойство доступно только для чтения.

Общая память (в байтах), доступная для данных, задается в виде скалярного значения. Это свойство доступно только для выбранного устройства. Это значение может отличаться от значения, сообщаемого NVIDIA® Интерфейс управления системой из-за кэширования памяти.

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Пиковая тактовая частота графический процессор в кГц, заданная в виде скалярного значения.

Это свойство доступно только для чтения.

Вычислительный режим устройства, заданный как одно из следующих значений.

'Default'Устройство не ограничено, и несколько приложений могут использовать его одновременно. MATLAB может совместно использовать устройство с другими приложениями, включая другие сеансы работы с MATLAB или рабочие места.
'Exclusive thread' или 'Exclusive process'Одновременно устройство может использовать только одно приложение. Пока устройство выбрано в MATLAB, его не могут использовать другие приложения, включая другие сеансы работы с MATLAB или рабочие.
'Prohibited'Устройство не может использоваться.

Это свойство доступно только для чтения.

Флаг для поддержки перекрывающихся передач, заданный как логические значения 0 или 1.

Это свойство доступно только для чтения.

Флаг тайм-аута для длинных ядер, заданный как логические значения 0 или 1. Если 1операционная система устанавливает верхнюю границу на время, отведенное для выполнения ядра CUDA. По истечении этого времени драйвер CUDA выдает ядро и возвращает ошибку.

Это свойство доступно только для чтения.

Флаг для поддержки отображения памяти хоста в адресное пространство CUDA, заданный как логические значения 0 или 1.

Это свойство доступно только для чтения.

Флаг поддерживаемого устройства, заданный логическими значениями 0 или 1. Не все устройства поддерживаются; для примера, устройств с недостаточной ComputeCapability.

Это свойство доступно только для чтения.

Флаг доступного устройства, заданный логическими значениями 0 или 1. Это свойство указывает, доступно ли устройство для использования в текущем сеансе работы с MATLAB. Неподдерживаемые устройства с DeviceSupported свойство 0 всегда недоступны. Устройство также может быть недоступно, если его ComputeMode для свойства задано значение 'Exclusive thread', 'Exclusive process', или 'Prohibited'.

Это свойство доступно только для чтения.

Флаг для текущего выбранного устройства, заданный логическими значениями 0 или 1.

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

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

gpuDeviceCountКоличество имеющихся устройств GPU
resetСбросьте графический процессор и очистите его память
wait (GPUDevice)Подождите завершения вычисления графический процессор

Также доступны следующие функции:

parallel.gpu.GPUDevice.isAvailable(indx)Возвращает логический 1 или true если графический процессор задан индексом indx поддерживается и может быть выбран. indx может быть целым числом или вектором целых чисел; индексом по умолчанию является текущее устройство.
parallel.gpu.GPUDevice.getDevice(indx)Возвращает GPUDevice объект без его выбора.

Полный список функций можно узнать в methods функция на GPUDevice объект:

methods('parallel.gpu.GPUDevice')

Вы можете получить помощь по любой из функций объекта с помощью следующей команды:

help parallel.gpu.GPUDevice.functionname

где functionname - имя функции. Например, чтобы получить помощь по isAvailable, тип:

help parallel.gpu.GPUDevice.isAvailable

Примеры

свернуть все

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

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

gpuDeviceCount("available")
ans = 2

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

gpuDeviceTable
ans=2×5 table
    Index        Name         ComputeCapability    DeviceAvailable    DeviceSelected
    _____    _____________    _________________    _______________    ______________

      1      "TITAN RTX"            "7.5"               true              true      
      2      "Quadro K620"          "5.0"               true              false     

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

Чтобы использовать другое устройство, вызовите gpuDevice с индексом другого устройства.

gpuDevice(2)
ans = 
  CUDADevice with properties:

                      Name: 'Quadro K620'
                     Index: 2
         ComputeCapability: '5.0'
            SupportsDouble: 1
             DriverVersion: 11
            ToolkitVersion: 10.2000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 2.1475e+09
           AvailableMemory: 1.6776e+09
       MultiprocessorCount: 3
              ClockRateKHz: 1124000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

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

D = gpuDevice;

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

for ii = 1:gpuDeviceCount
    D = gpuDevice(ii);
    fprintf(1,'Device %i has ComputeCapability %s \n', ...
            D.Index,D.ComputeCapability)
end
Device 1 has ComputeCapability 7.5
Device 2 has ComputeCapability 6.1

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

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

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

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

parpool('local',availableGPUs);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 3).

Чтобы определить, какой графический процессор использует каждый рабочий процесс, вызовите gpuDevice внутри spmd блок. The spmd блок запускается gpuDevice на каждом работнике.

spmd
    gpuDevice
end

Используйте функции параллельного языка, такие как parfor или parfeval, чтобы распределить ваши расчеты среди работников в параллельном пуле. Если вы используете gpuArray активизированные функции в ваших расчетах, эти функции выполняются на графическом процессоре работника. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре. Для получения примера смотрите Запуск функций MATLAB на нескольких графических процессорах.

Когда вы закончите с вашими расчетами, отключите параллельный пул. Можно использовать gcp функция для получения текущего параллельного пула.

delete(gcp('nocreate'));

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

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

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

Задайте индексы устройств, которые вы хотите использовать.

useGPUs = [1 3];

Запустите свой параллельный пул. Использование spmd блок и gpuDevice чтобы связать каждый рабочий процесс с одним из используемых графических процессоров, используя индекс устройства. The labindex функция определяет индекс каждого работника.

parpool('local',numel(useGPUs));
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(labindex));
end

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

Когда вы закончите с вашими расчетами, отключите параллельный пул.

delete(gcp('nocreate'));
Введенный в R2010b