gpuDevice

Запросите или выберите устройство GPU

Описание

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

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

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

Создание

Синтаксис

gpuDevice
D = gpuDevice
D = gpuDevice(IDX)
gpuDevice([])

Описание

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

пример

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

пример

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

пример

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

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

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

Пример: 1024

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

Пример: 49152

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

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

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

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

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

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

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

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

'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.

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

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

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

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

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

Для полного списка функций используйте функцию methods на объекте GPUDevice:

methods('parallel.gpu.GPUDevice')

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

help parallel.gpu.GPUDevice.functionname

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

help parallel.gpu.GPUDevice.isAvailable

Примеры

свернуть все

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

gpuDeviceCount
    2

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

d = gpuDevice
d =

  CUDADevice with properties:

                      Name: 'GeForce GTX 1080'
                     Index: 1
         ComputeCapability: '6.1'
            SupportsDouble: 1
             DriverVersion: 10
            ToolkitVersion: 10
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 8.5899e+09
           AvailableMemory: 7.0053e+09
       MultiprocessorCount: 20
              ClockRateKHz: 1733500
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
            DeviceSelected: 1

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

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

gpuDevice(2)

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

g = gpuDevice;

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

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

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

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

parpool('local',gpuDeviceCount);

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

spmd
    gpuDevice
end

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

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

delete(gcp('nocreate'));

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

gpuIndices = [1 3];
parpool(numel(gpuIndices));
spmd
    gpuDevice(gpuIndices(labindex));
end

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

Представленный в R2010b