Ответ 1
Поскольку вы используете карты nvidia Quadro, вы можете использовать расширение WGL_NV_gpu_affinity, чтобы выбрать графический процессор.
Я не уверен в чипах ATI, но я думаю, что это AMD_gpu_association
У меня есть приложение OpenGL, которое будет работать на машинах с разнообразными конфигурациями с несколькими GPU (и, возможно, с разными версиями Windows, от XP до 7). Существует ли общий способ выбора конкретного графического процессора, который будет выступать в роли рендеринга OpenGL независимо от комбинации GPU (например, NVIDIA + NVIDIA, NVIDIA + AMD, NVIDIA + Intel и т.д.)? Это должно быть решение, которое может применяться с помощью кода приложения, то есть непосредственно на С++ или script, который будет вызываться из приложения без вмешательства пользователя.
Ниже приведены сведения о нескольких тестах, которые я сделал, чтобы попытаться найти решение, начиная с очень конкретных случаев, но, возможно, есть решение, которое может работать во всех или большинстве случаев.
Есть ли какой-либо надежный метод для принудительного преобразования графического процессора в OpenGL?
Любой намек будет очень оценен. Спасибо заранее!
Тестирование с комбинациями двух карт Quadro
с использованием того же драйвера (версия 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 в качестве средства визуализации, но он уродлив, и я не знаю, является ли он автоматизируемым или если он будет работать во всех случаях.
Попытка выбрать GPU рендеринга с помощью расширения WGL_NV_gpu_affinity.
Благодаря комбинации FX 1700 и FX 570 расширение сообщает оба GPU как совместимые, и я могу ограничить рендеринг только одним из них. С парой FX 1700 + FX 540 в расширении сообщается только один совместимый графический процессор, который водитель решает использовать для рендеринга OpenGL. С комбинацией FX 1700 + NVS 285 всегда сообщается только FX 1700 (я полагаю, что NVS 285 не поддерживает это расширение, потому что, если он является единственной используемой карточкой, он все еще не сообщается расширением).
Эта система работает с 64-разрядной версией Windows 7, а графические карты - одной Intel HD Graphics 2000 (интегрированной в CPU (Sandy Bridge)) и одним AMD Radeon HD 6450. Во всех случаях рендеринг работает на обоих экранах, но рендеринг GPU зависит от некоторых переменных:
В этой системе я также попробовал решение, предлагаемое на форумах OpenGL. TL; DR: это хакерский метод выбора драйвера, используемого OpenGL, поэтому он может выбирать между графическими процессорами, использующими разные драйверы, но не между картами, использующими один и тот же драйвер. Я получил следующие результаты:
Поскольку вы используете карты nvidia Quadro, вы можете использовать расширение WGL_NV_gpu_affinity, чтобы выбрать графический процессор.
Я не уверен в чипах ATI, но я думаю, что это AMD_gpu_association