gpuDevice

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

Описание

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

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

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

Создание

Описание

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

пример

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

пример

D = gpuDevice(indx) выбирает устройство графического процессора, заданное индексом indx. Если заданное устройство графического процессора не поддерживается, ошибка происходит. Этот синтаксис сбрасывает заданное устройство и очищает его память, даже если устройство уже в настоящее время выбрано (эквивалентный 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® Интерфейс Управления системой из-за кэширования памяти.

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

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

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

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

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