Я использую CUDA 7.5 на машине с Ubuntu Server 14.04 и 3 графическими процессорами: 2x Tesla K20C и 1x GeForce GT 630. Я попытался установить для CUDA_VISIBLE_DEVICES соответствующие идентификаторы, чтобы код работал только на обоих графических процессорах Tesla. По какой-то причине программа, кажется, игнорирует переменную и пытается запустить код на всех 3 графических процессорах, что приводит к ошибке.

До сих пор я пытался установить переменную в /etc/environment а также в файле bash.bashrc (после перезагрузки). При использовании echo $CUDA_VISIBLE_DEVICES правильные значения. Кроме того, при удаленном запуске программы из NSight через SSH с соответствующей установленной переменной среды, выполнение работает так, как задумано, и использует только два графических процессора Tesla. Но когда я запускаю программу локально (через терминал или через работника Gearman из веб-интерфейса), переменная окружения, похоже, игнорируется.

В качестве обходного пути я использую в setenv("CUDA_VISIBLE_DEVICES","0,2",1) . Но это делает мою программу непереносимой.

Что мне здесь не хватает? Спасибо!

1 ответ1

0

Отладка резиновой утки действительно работает.

Оказывается, достаточно использовать unsetenv перед вызовом cuInit или cudaSetDevice, и начальное значение переменной environmentmetal будет игнорироваться.

#include <stdio.h>
#include <stdlib.h>
#include <cuda.h>

int
main(int argc, char **argv, char **env)
{
  int x;
  unsetenv("CUDA_VISIBLE_DEVICES");
  cuInit(0);
  // Now we see all the devices on machine
  cuDeviceGetCount(&x);
  printf("%d\n",x);
  return 0;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .