выбор устройства cuda с несколькими потоками процессора - PullRequest
3 голосов
/ 17 апреля 2010

Можете ли вы сказать мне, как cuda runtime выбирает устройство с графическим процессором, если 2 или более хост-потока используют cuda runtime?

выбирает ли среда выполнения отдельные устройства графического процессора для каждого потока?

нужно ли явно устанавливать устройство с графическим процессором?

Спасибо

Ответы [ 3 ]

7 голосов
/ 17 апреля 2010

Да, устройство с графическим процессором должно быть установлено явно, или будет использоваться устройство по умолчанию (обычно устройство 0)

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

Что-то, что я считаю полезным при запуске темы,

cudaThreadExit(); // clears all the runtime state for the current thread
cudaSetDevice(deviceId); // explicit set the current device for the other calls
cudaMalloc
cudaMemcpy
etc.. 

В руководстве по программированию есть глава, посвященная ему.

5 голосов
/ 29 июня 2011

Это зависит от режима, в котором установлены графические процессоры.

Позвоните nvidia-smi -q, чтобы найти Compute Mode вашего графического процессора. В зависимости от версии используемой вами платформы CUDA выходные данные будут разными.

В основном режим по умолчанию установлен для графических процессоров. Это позволяет нескольким контекстам поочередно работать на одном и том же графическом процессоре. Однако каждый контекст должен явно освобождать графический процессор: в то время как контекст владеет графическим процессором, другие блокируются на короткий период, а затем уничтожаются по истечении времени ожидания.

Чтобы обойти это ограничение, вы можете вызвать nvidia-smi -c с одним из этих явных значений, в зависимости от ваших потребностей:

  • DEFAULT
  • EXCLUSIVE_THREAD
  • ЗАПРЕЩЕНО
  • EXCLUSIVE_PROCESS
1 голос
/ 24 мая 2012

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

Одна простая стратегия состояла бы в установке всех графических процессоров на EXCLUSIVE_THREAD (как показано jopasserat). Поток будет перебирать все доступные графические процессоры и пытаться выбрать свободный графический процессор, пока не добьется успеха.

Тот же механизм будет хорошо работать в случае EXCLUSIVE_PROCESS.

См. 3.4 режима вычислений в документации по инструменту cuda. ​​

...