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

12

В настоящее время многие ноутбуки оснащены двумя графическими процессорами - высокопроизводительным и энергосберегающим (менее мощным). Большинство приложений, которые я использую на своем ноутбуке, работают на моем интегрированном (энергосберегающем) графическом процессоре, но некоторые из них по-прежнему открываются с помощью высокопроизводительной карты. Я пытаюсь настроить приложение, которое я создаю, для запуска на высокопроизводительном графическом процессоре по умолчанию, но я не могу найти никакой информации по этой теме. Я надеюсь, что кто-то может пролить немного света на это. Я распространю свое приложение с помощью установщика NSIS и думаю, что мне придется добавить путь своего приложения в список приложений для карт NVidia / ATI. Приложение запрограммировано на C #. Кроме того, кто-нибудь знает, как обстоят дела с настольными ПК? Что произойдет, если на компьютере установлено 2 графических процессора, и мне нужно выбрать более мощный?

Милко

Милко
источник

Ответы:

7

У NVIDIA здесь есть документ с изложением некоторых стратегий, которые могут быть вам полезны: http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf - к сожалению, я бы предложил другой вариант - NvOptimusEnablement экспорт - документирован только для C ++; это может быть возможно сделать и с C #, но кто-то, кто на самом деле знает, должен будет вмешаться в информацию.

Я не знаю ничего подобного для AMD.

Так что, к сожалению, похоже, что нет никакого независимого от производителя способа сделать это (даже перечисление устройств отображения оставило бы вас в зависимость от пользователей, заставляющих настройки через свои панели управления драйверами, что пользователи имеют нежелательную тенденцию делать, чтобы максимизировать игры, которые не поставляются с полностью настраиваемыми настройками графики). В отсутствие такого вам, возможно, придется положиться на readme и надеяться, что люди действительно его прочитают!

Максимус Минимус
источник
+1: я не знал этот NvOptimusEnablementтрюк Оптимуса , но должен был. Похоже, что это недавно (водитель 302.x +) Спасибо.
Шон Мидлдич
1
stackoverflow.com/questions/17458803/… Для всех, кто интересуется эквивалентами AMD, я спросил об этом (на SO, поскольку не зависит от игры).
Шон Мидлдич
1
В качестве крайней меры вы можете вызывать функции C ++ из C #, используя p / invoke.
BlueRaja - Дэнни Пфлюгофт
@ BlueRaja-DannyPflughoeft - это не функция C ++; это экспортированная глобальная переменная.
Максимус Минимус
5

В общем, вы не можете.

Драйвер с двумя графическими процессорами скрывает два графических процессора за одним интерфейсом, поэтому такие решения, как у Натана Рида, обычно не работают в большинстве распространенных высокоскоростных / маломощных систем с двумя графическими процессорами.

Выбор GPU должен каким-то образом обрабатываться драйвером. С помощью NVIDIA Optimus вы обычно обновляете профили Optimus, чтобы добавить приложение в список приложений, использующих дискретный графический процессор, обычно щелкнув правой кнопкой мыши по EXE и выбрав Свойства. Вы также можете использовать некоторые специфичные для Optimus звонки. согласно ответу mh01. С настройками AMD это совершенно другое.

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

Это то, на что я действительно надеюсь, что это "исправлено" в будущем обновлении DirectX. В идеале оба GPU должны быть перечислены, как предложил Натан, и тогда будут подсказки, чтобы указать, какой из них предназначен для высокоскоростного или маломощного, поэтому приложение может разумно выбрать правильный или даже переключить, какое устройство оно использует, основываясь на чем угодно. факторы (скажем, выбор веб-браузера в зависимости от загрузки WebGL).

Шон Миддледич
источник
Ааа, интересно. Я не использовал ни одну из этих систем с двумя графическими процессорами, поэтому я не знал, что драйвер делает вид, что они одинаковые. Можно подумать, что драйвер может отслеживать уровень использования графического процессора для конкретного приложения и переключать его на высокопроизводительный, если это необходимо.
Натан Рид
1
Не может Аппаратное обеспечение имеет разные возможности. Представьте, что вы переключились с графического процессора с максимальным размером текстуры 2048 на один с максимальным размером 1024 или какой-либо другой характеристикой - все ваше приложение сломалось бы. Если при переходе к более мощному графическому процессору в любом случае буферам понадобится миграция (что потребует времени и вызовет нежелательную заминку кадров), а шейдерам потребуется перекомпиляция. Приложение должно нести ответственность за этот процесс и отказаться или отказаться от любого переключателя. К сожалению, API-интерфейсы для него пока еще не разработаны.
Шон Миддледич
1
Это усложняется тем, что пользователи часто хотят отменить переключение графического процессора на своем ноутбуке, возможно, для экономии заряда батареи. Это одна из причин, по которой я предпочитаю делегировать переключение графического процессора в ОС, потому что он также знает состояние питания ноутбука.
Фальшивое имя
4

Вы должны иметь возможность перечислять графические процессоры в системе и выбирать, какой из них использовать при запуске приложения. Вы не упомянули, какой API вы используете, но, например, в D3D11 вы бы использовали IDXGIFactory :: EnumAdapters, чтобы получить список графических процессоров и передать тот, который вы хотите, в D3D11CreateDevice .

DXGI может предоставить вам некоторую ограниченную информацию о графическом процессоре, такую ​​как строка описания, идентификатор поставщика и идентификатор устройства. Я полагаю, что вы можете использовать эту информацию, чтобы сказать, какой графический процессор является высокопроизводительным, но вам придется создать какую-то базу данных графических процессоров или попытаться использовать некоторую эвристику, чтобы угадать. Или вы можете позволить пользователю выбрать, какой графический процессор использовать при запуске.

Натан Рид
источник