PGI openACC: целевое устройство GPU

У меня есть две карты NVIDIA:

$ ls /dev/nv*
/dev/nvidia0  /dev/nvidia1  /dev/nvidiactl  /dev/nvidia-uvm

используя pgcc, как мне выбрать конкретную карту? Как убедиться, что код сгенерирован для nvidia0 (устройство =0) или nvidia1 (устройство =1)?

Спасибо заранее за вашу помощь.

2 ответа

Решение

Процедура OpenACC API для целевого устройства:

acc_set_device_num( i, acc_device_nvidia );

Если вы вызываете это один раз, в начале вашей программы, с i установите порядковый номер устройства, которое вы хотите использовать, затем вы можете настроить это устройство программно.

Однако, в зависимости от вашего варианта использования, вам может оказаться проще просто написать свой код без таких процедур API, а вместо этого использовать CUDA_VISIBLE_DEVICES переменная окружения. Например, вы можете сделать:

CUDA_VISIBLE_DEVICES="0" ./my_app

запустить ваш код на устройстве 0, или

CUDA_VISIBLE_DEVICES="1" ./my_app

запустить тот же код на устройстве 1.

Чтобы убедиться, что код генерируется для определенного типа устройства, вы должны добавить вычислительные возможности этого устройства к -ta переключиться во время компиляции, например:

pgcc -ta=tesla:cc30 ...

будет генерировать код для устройства cc3.0. Если вы используете справку командной строки для pgcc:

pgcc -help

в нем будут перечислены другие поддерживаемые параметры для этого. Например, мой pgcc (15.7) показывает:

...
-ta=tesla:{cc20|cc30|cc35|cc50|cuda6.5|cuda7.0|fastmath|[no]flushz|[no]fma|keepbin|keepgpu|keepptx|[no]lineinfo|[no]llvm|loadcache:{L1|L2}|maxregcount:<n>|pin|[no]rdc|[no]unroll|beta}|nvidia|radeon:{keep|[no]llvm|[no]unroll|tahiti|capeverde|spectre|buffercount:<n>}|host
                    Choose target accelerator
    tesla           Select NVIDIA Tesla accelerator target
     cc20           Compile for compute capability 2.0
     cc30           Compile for compute capability 3.0
     cc35           Compile for compute capability 3.5
     cc50           Compile for compute capability 5.0
...

Также есть переменная среды OpenACC "ACC_DEVICE_NUM", которую можно использовать для установки номера используемого устройства.

Другие вопросы по тегам