Есть ли способ программно выбрать графический процессор для рендеринга в среде с несколькими графическими процессорами? (Windows)

Вопрос

У меня есть приложение OpenGL, которое будет работать на машинах с различными конфигурациями нескольких GPU (и, возможно, с разными версиями Windows, от XP до 7). Есть ли общий способ выбрать конкретный графический процессор, который будет действовать как средство визуализации OpenGL независимо от комбинации графических процессоров (например, NVIDIA + NVIDIA, NVIDIA + AMD, NVIDIA + Intel и т. Д.)? Это должно быть решение, которое можно применить из кода приложения, то есть непосредственно в C ++, или сценарий, который будет вызываться из приложения без вмешательства конечного пользователя.

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

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

Любой намек поможет буду очень признателен. Заранее благодарим!

Опробованные возможные решения

Windows XP 64 с двумя NVIDIA Quadro

Тестирование с комбинациями двух карт Quadro

  • Quadro FX 1700 + Quadro FX 570
  • Quadro FX 1700 + Quadro FX 540
  • Quadro FX 1700 + Quadro NVS 285

с использованием того же драйвера (версия 275.36) в 64-битной Windows XP,У меня был относительный успех с различными методами, такими как:

  • Предоставление водителю решения.
    Это решение хорошо, только если обе карты используют один и тот же драйвер, и он решает использовать желаемую карту. Так что это слишком специфично и, возможно, непредсказуемо.

  • Изменение настроек драйвера в коде с NVAPI , прежде чем позволить драйверу решить.
    С помощью этого решения теоретически возможно заставить драйвер решать, как я хочу, но это сложно, необходимо, чтобы обе карты использовали одни и те же драйверы и не всегда работали (с FX 1700 + NVS 285 это не работает).

  • Изменение главного экрана.
    Это приводит к тому, что приложение по умолчанию открывается на выбранном основном экране. Это решение работало само по себе только с комбинацией FX 1700 + FX 570. В FX 1700 + FX 540 средство визуализации зависит от настроек драйвера независимо от главного экрана, а в FX 1700 + NVS 285 средством визуализации всегда является FX 1700.

  • Создание контекста OpenGL, когда окно находится на определенном экране. .
    Окно может быть создано на желаемом экране, независимо от того, какой экран является основным, но оно имеет те же проблемы, что и решение выше.

  • Создание контекста OpenGL с включением только экрана на желаемой видеокарте и последующим включением другого /s.
    Я нашел единственный способ использовать NVS 285 в качестве средства визуализации, но он уродлив, и я не знаю, можно ли его автоматизировать или будет ли он работать во всех случаях.

  • Попытка выбрать графический процессор для визуализации с помощью расширение WGL_NV_gpu_affinity .
    С комбинацией FX 1700 и FX 570 расширение сообщает обо всех графических процессорах как совместимых, и я могу ограничить рендеринг только одним из них. В паре FX 1700 + FX 540 расширение сообщает только об одном совместимом графическом процессоре, который драйвер решает использовать для рендеринга OpenGL. С комбинацией FX 1700 + NVS 285 всегда сообщается только FX 1700 (я полагаю, что NVS 285 не поддерживает это расширение, потому что, если это единственная используемая карта, это все еще не сообщается расширением).

Windows 7 64 с Intel и AMD

Эта система работает с 64-разрядной ОС Windows 7, а в качестве видеокарт используются одна видеокарта Intel HD Graphics 2000 (встроенная в ЦП (Sandy Bridge)) и одна AMD Radeon HD 6450. Всего случаях рендеринг работает на обоих экранах, но графический процессор рендеринга зависит от некоторых переменных:

  • Если главный экран подключен к AMD и окно открыто на этом экране, то AMD является средством визуализации.
  • Если главный экран подключен к AMD, и окно открывается на другом экране, тогда рендерером является «GDI Generic», что очень медленно.
  • Если главный экран подключен к Intel, то Intel является рендерером , независимо от того, где открыто окно.

С этой системой я также попробовал решение, предложенное в Форумы OpenGL . TL; DR: это хакерский метод выбора драйвера, используемого OpenGL, поэтому он может выбирать между графическими процессорами, которые используют разные драйверы, но не между картами, которые используют один и тот же драйвер. Я получил следующие результаты:

  • Если главный экран подключен к AMD, я могу выбрать любой графический процессор в качестве средства визуализации.
  • Если главный экран подключен к Intel, я могу выбрать Intel в качестве средства визуализации ( бесполезно, так как это происходит автоматически), но я получаю сообщение об ошибке, если пытаюсь выбрать AMD; Я думаю, это может быть ошибка драйвера.
19
задан Stevoisiak supports Monica 23 October 2017 в 16:30
поделиться