gpuDevice

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

Описание

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

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

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

Создание

Описание

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