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