Як я можу налаштувати програму запуск за умовчанням на високопродуктивний графічний процесор?


12

На сьогоднішній день велика кількість ноутбуків оснащена двома графічними процесорами - високопродуктивним та енергозберігаючим (менш потужним). Більшість додатків, які я використовую на своєму ноутбуці, працює із вбудованим (енергозберігаючим) графічним процесором, але все ж деякі з них налаштовані на відкриття за допомогою високопродуктивної карти. Я намагаюся налаштувати додаток, який я будую для роботи на високопродуктивній GPU за замовчуванням, але я ніде не можу знайти інформацію про тему. Я сподіваюся, що хтось може пролити трохи світла на це. Я розповсюджую свою програму разом із установкою 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фокусу Optimus , але я мав би це зробити. Здається, що це нещодавня річ (драйвер 302.x +) Дякую.
Шон Міддлічч

1
stackoverflow.com/questions/17458803/… Для всіх, хто цікавиться еквівалентами AMD, я запитав це (про ТАК, оскільки не залежить від гри).
Шон Міддлідч

1
Ви можете зателефонувати на функції C ++ з C #, використовуючи p / invoke, в крайньому випадку.
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft - це не функція C ++; це експортована глобальна змінна.
Максим Мінімус

5

Взагалі, не можна.

Драйвер подвійного GPU ховає два GPU за єдиним інтерфейсом, тому такі рішення, як Nathan Reed, як правило, не працюють у більшості звичайних налаштувань подвійного GPU з високою швидкістю та низькою потужністю.

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

У інших системах є апаратний комутатор або прапор ОС, щоб вирішити, який графічний процесор активний. Знову ж таки, програма не має контролю над тим, який GPU використовується.

Це те, на що я дуже сподіваюся, що "виправлено" в майбутньому оновлення DirectX. В ідеалі обидва графічні процесори будуть перераховані так, як запропонував Натан, і тоді з’являться підказки, щоб вказати, який з них призначений для швидкісного або малопотужного, тому програма може розумно вибрати правильний або навіть переключити, який пристрій він використовує, залежно від того, що фактори (скажімо, дозволяти веб-браузеру вибирати залежно від завантаження WebGL).


Ах, цікаво. Я не використовував жодної з цих систем з подвійним графічним процесором, тому не знав, що драйвер робить вигляд, що вони однакові. Ви можете подумати, що драйвер може відстежувати рівень використання графічного процесора для певного додатка та, якщо потрібно, переключити його на високий.
Натан Рід

1
Це не може. Обладнання має різні можливості. Уявіть собі, якби ви перейшли з графічного процесора з максимальним розміром текстури 2048 до одного з максимумом 1024, або з якоюсь іншою характеристикою - весь ваш додаток зламається. Якщо у будь-якому випадку ви перейдете до більш здібного графічного процесора, буфери потребують міграції (потребує часу та спричинення небажаного зачеплення кадру), а шейдери потребують рекомпіляції. Додаток повинен відповідати за цей процес і ввімкнути або вимкнути будь-який комутатор. На жаль, API для нього просто ще не розроблені, на жаль.
Шон Міддлітч

1
Це ускладнюється тим, що користувачі часто хочуть перекрити перемикання GPU на своєму ноутбуці, можливо, для економії акумулятора. Це одна з причин, що я вважаю за краще делегувати перемикання GPU в ОС, оскільки він також знає стан живлення ноутбука.
Підроблена назва

4

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.