2015-07-25 2 views
0

Я недавно установил на своем компьютере второй GPU (Tesla K40), и мои поиски предположили, что первый PCI-слот станет графическим процессором по умолчанию, выбранным для заданий CUDA. Большое звено объясняет его можно найти здесь:CUDA GPU выбран положением, но как установить значение по умолчанию как нечто отличное от устройства 0?

Default GPU Assignment

Моего оригинального GPU является TITAN X, также включена CUDA, но это на самом деле лучше всего подходит для одиночных расчетов точности и Тесла лучше для двойной точности. Мой вопрос для группы заключается в том, есть ли способ настроить мое устройство программирования CUDA по умолчанию, чтобы быть вторым всегда? Очевидно, я могу указывать в коде каждый раз, когда какое устройство использовать, но я надеюсь, что смогу настроить свой набор таким образом, чтобы он всегда по умолчанию использовал карту Tesla.

Или это единственный способ открыть окно и физически заменить позиции устройств? Как-то это кажется неправильным мне ....

Любые советы или соответствующие ссылки для последующего рассмотрения были бы весьма полезными.

Приветствия,

Diddy

+3

'CUDA_VISIBLE_DEVICES' [ваш друг] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#env-vars). –

+0

Можете ли вы жить до 1000 ..... – tdiddy

ответ

4

Как вы уже отмечалось, имеет время выполнения CUDA its own heuristic для заказа графических процессоров и назначение устройств индексов к ним.

CUDA_VISIBLE_DEVICESenvironment variable позволит вам изменить этот заказ.

Например, предположим, что в обычном режиме мое устройство отображения перечисляется как устройство 0, и мой предпочтительный графический процессор CUDA перечисляется как устройство 1. Приложения, написанные без использования cudaSetDevice, например, будут использовать устройство по умолчанию переписываются как 0. Если я хочу изменить это под Linux я мог бы использовать что-то вроде:

CUDA_VISIBLE_DEVICES="1" ./my_app 

вызвать Cuda выполнения перечислить устройства, которые обычно устройство 1 в качестве устройства 0 для этого приложения запуска (и обычное устройство 0 будет «скрыто» от CUDA, в данном случае). Вы можете сделать это «постоянный» на сессии просто путем экспорта этой переменной (например, Баш):

export CUDA_VISIBLE_DEVICES="1" 
./my_app 

Если я просто хотел отменить заказ во время выполнения на CUDA по умолчанию, но до сих пор делают оба графических процессоров доступны для приложения, Я мог бы сделать что-то вроде:

CUDA_VISIBLE_DEVICES="1,0" ./deviceQuery 

Есть другие варианты спецификации, такие как использование GPU UUID идентификаторы (вместо индексов устройств), как это предусмотрено nvidia-smi.

См. Также the documentation или this writeup.