Как выбрать устройство при запуске исполняемого файла CUDA? - PullRequest
6 голосов
/ 09 января 2012

Я подключаюсь к кластеру GPU извне и не знаю, как выбрать устройство, на котором будут запускаться мои программы CUDA.

Я знаю, что в кластере два GPU Tesla, и я бы хотел выбрать один из них.

Есть идеи как? Как вы выбираете устройство, которое хотите использовать, когда к вашему компьютеру подключено множество устройств?

Ответы [ 2 ]

10 голосов
/ 09 января 2012

Канонический способ выбора устройства в API времени выполнения - cudaSetDevice. Это настроит среду выполнения для выполнения отложенного установления контекста на назначенном устройстве. До CUDA 4.0 этот вызов на самом деле не устанавливал контекст, он просто говорил среде выполнения, какой графический процессор попробовать и использовать. Начиная с CUDA 4.0, этот вызов создаст контекст для назначенного графического процессора во время вызова. Существует также cudaChooseDevice, который будет выбирать среди доступных устройств для поиска устройства, которое соответствует критериям, предоставленным вызывающим абонентом.

Вы можете перечислить доступные графические процессоры в системе с помощью cudaGetDeviceCount и получить их данные, используя cudaGetDeviceProperties. Пример SDK deviceQuery показывает полную информацию о том, как это сделать.

Однако, возможно, вам нужно быть осторожным при выборе графических процессоров в системе с несколькими графическими процессорами в зависимости от конфигурации хоста и драйвера. Как в драйвере Linux, так и в драйвере TCC для Windows существует возможность пометить графические процессоры как «вычислить исключительные», что означает, что драйвер будет ограничивать каждый графический процессор одним активным контекстом за раз или вычислять запрещено, что означает, что ни одна программа CUDA не может установить контекст на этом устройстве. Если ваш код пытается установить контекст на запрещенном для вычислений устройстве или на используемом исключительном вычислительном устройстве, результатом будет недопустимая ошибка устройства. В системе с несколькими графическими процессорами, где политика заключается в использовании исключительности вычислений, правильным подходом является не попытка выбрать конкретный графический процессор, а просто возможность неявного создания отложенного контекста. Драйвер автоматически выберет бесплатный графический процессор для вашего кода. Состояние режима вычислений любого устройства можно проверить, прочитав поле cudaDeviceProp.computeMode с помощью вызова cudaGetDeviceProperties. Обратите внимание, что вы можете проверять недоступные или запрещенные графические процессоры и запрашивать их свойства, но любая операция, которая потребует установки контекста, не будет выполнена.

См. Документацию по API времени выполнения для всех этих вызовов

.
3 голосов
/ 09 декабря 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...