exponenta event banner

gpuDevice

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

Описание

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

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

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

Создание

Описание

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

пример

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

пример

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

пример

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

Входные аргументы

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

Версия драйвера графического процессора, используемая в настоящее время, указана как скалярное значение. Чтобы использовать выбранное устройство графического процессора в 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Количество имеющихся устройств графического процессора
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     

Если первым устройством является устройство, которое вы хотите использовать, вы можете продолжить. Для выполнения вычислений на GPU используйте 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 блок. spmd участки блоков gpuDevice на каждого работника.

spmd
    gpuDevice
end

Использовать параллельные языковые функции, такие как parfor или parfeval, чтобы распределить ваши вычисления среди работников в параллельном пуле. Если вы используете gpuArray включенные функции в вычислениях, эти функции выполняются на GPU работника. Дополнительные сведения см. в разделе Выполнение функций 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 чтобы связать каждого работника с одним из графических процессоров, которые вы хотите использовать, используя индекс устройства. 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