выбор устройства cuda с несколькими потоками процессора

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

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

нужно ли явно устанавливать устройство GPU?

Спасибо


person Anycorn    schedule 17.04.2010    source источник


Ответы (3)


Да, устройство с графическим процессором необходимо указать явно, иначе будет использоваться устройство по умолчанию (обычно устройство 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.. 

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

person fabrizioM    schedule 17.04.2010
comment
@fabrizioM Какая это глава? - person syntagma; 26.03.2015

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

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

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

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

  • ДЕФОЛТ
  • EXCLUSIVE_THREAD
  • ЗАПРЕЩЕННЫЙ
  • EXCLUSIVE_PROCESS
person jopasserat    schedule 29.06.2011

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

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

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

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

person ZeroCool    schedule 24.05.2012