Можно ли использовать карту gpu для gpgpu во время игры?

Я начал изучать гетерогенное параллельное программирование с использованием CUDA (будет использоваться рабочий стол, если это имеет значение), и у меня есть вопрос, на который я пока не нашел ответа. Можно ли использовать видеокарту для gpgpu во время игры в 3D? Если да, то насколько большими будут затраты на производительность? И как их измерить? Запуск моего приложения с игрой и без нее в фоновом режиме не кажется надежным решением.

Насколько я знаю, видеокарта занята рендерингом сцен и прочим, но я не знаю, как именно это работает. Устройство заблокировано игровым приложением от использования для gpgpu, пока пользователь не выйдет из игры? Или он просто получает асинхронные вызовы для выполнения таких задач:

  • устройство бесплатно;
  • игровое приложение запрашивает у устройства рендеринг сцены;
  • устройство заблокировано игрой, выполните задание, после чего оно снова бесплатно;
  • мое приложение просит устройство сделать что-то gpgpu;
  • устройство заблокировано моим приложением, выполните задание, после чего оно снова бесплатно,
  • и так далее...

В качестве другого решения: можно ли использовать отдельную видеокарту только для этой цели (может быть, мне нужно предотвратить ее использование игровым приложением)?


person Nikolay Bobovnikov    schedule 22.01.2015    source источник
comment
Это интересный вопрос, но поскольку речь идет не о конкретной проблеме программирования (то есть о коде, который вы сейчас пишете), речь идет о не по теме о переполнении стека - возможно, вам следует попробовать спросить GameDev вместо этого ?   -  person GoBusto    schedule 22.01.2015
comment
Если бы графический процессор был заблокирован при рендеринге приложения OpenGL, вы не смогли бы одновременно запускать два приложения OpenGL, что определенно не так. Вы также можете запускать OpenGL и OpenCL вместе; У CL есть способы связи с GL. В последних версиях GL также есть вычислительные шейдеры.   -  person Colonel Thirty Two    schedule 22.01.2015
comment
Вы могли бы попробовать это за то количество времени, которое вы потратили на ввод этого вопроса. Запуск ядер GPGPU на графическом процессоре, к которому подключен монитор, обычно делает рабочий стол несколько вялым. Величина медлительности зависит от времени выполнения ядра. Эффект, вероятно, будет довольно резким в играх. Вы можете использовать отдельный графический процессор. Убедитесь, что не включен SLI/Crossfire.   -  person void_ptr    schedule 22.01.2015


Ответы (1)


Можно ли использовать видеокарту для gpgpu во время игры в 3D?

да. (Попытайся.)

Если да, то насколько большими будут затраты на производительность?

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

И как их измерить?

Не должно быть сложно измерить любое общее воздействие. Размер памяти можно отслеживать с помощью таких инструментов, как GPU-Z или nvidia-smi. Вы можете отслеживать частоту кадров в своей игре, возможно, чтобы оценить влияние на производительность. И вы можете сравнить свое вычислительное приложение с запущенной игрой и без нее.

Устройство заблокировано игровым приложением от использования для gpgpu, пока пользователь не выйдет из игры?

Нет, но графический процессор должен переключаться между игровыми задачами и вычислительными задачами. Так, например, ваша игра перестанет работать, пока выполняются ядра CUDA. В связи с этим, если вы хотите запустить игру одновременно с вычислительным приложением, вы должны убедиться, что ваши вычислительные ядра очень короткие по продолжительности. Между вызовами ядра игровой движок «догоняет».

person Robert Crovella    schedule 29.01.2015