Согласно техническому примечанию NVIDIA, Включение высокопроизводительной визуализации графики в системах Optimus , вы можете убедиться, что ваше приложение использует режим высокопроизводительной графики, экспортировав глобальную переменную с именем NvOptimusEnablement
, значение которой установлено до 1
.
Начиная с драйверов выпуска 302, разработчики приложений могут указывать драйверу Optimus во время выполнения использовать высокопроизводительную графику для визуализации любого приложения - даже тех приложений, для которых нет существующего профиля приложения. Они могут сделать это, экспортировав глобальную переменную с именем NvOptimusEnablement
. Драйвер Optimus ищет наличие и ценность экспорта. Только LSB DWORD имеет значение в это время. Значение 0x00000001
указывает, что рендеринг должен выполняться с использованием высокопроизводительной графики. Значение 0x00000000
указывает, что этот метод следует игнорировать
Пример использования:
extern "C" {
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}
(В этом примере кода используется __declspec(export)
для указания компилятору автоматически экспортировать символ в виде данных, что предполагает компилятор Microsoft , хотя GCC теперь поддерживает его как расширение для MSVC -compatibility.)
Кроме того, в том же документе говорится, что вы можете статически связываться с одной из библиотек DLL драйвера NVIDIA для достижения того же эффекта:
Для любого приложения без существующего профиля приложения существует набор библиотек, которые при статической привязке к конкретному исполняемому файлу приложения будут указывать драйверу Optimus на визуализацию приложения с использованием высокопроизводительной графики. Начиная с версии 302, текущий список библиотек: vcamp110.dll
, vcamp110d.dll
, nvapi.dll
, nvapi64.dll
, opencl.dll
, nvcuda.dll
и cudart*.*
.
.
Обратите внимание, что это решение обеспечит зависимость от драйверов NVIDIA, тогда как экспорт переменной не будет.