web-dev-qa-db-ja.com

OptimusラップトップでプログラムによるNVIDIAGPUの強制

DirectXゲームをプログラミングしていますが、Optimusラップトップで実行すると、Intel GPUが使用されるため、パフォーマンスが低下します。コンテキストメニューを使用するか、実行可能ファイルの名前をbf3.exeまたはその他の有名なゲーム実行可能ファイル名に変更してNVIDIA GPUを強制すると、パフォーマンスは期待どおりになります。
明らかに、どちらもゲームを再配布する必要がある場合の許容できる解決策ではないので、プログラムでラップトップにNVIDIA GPUを使用させる方法はありますか?

DirectXを使用してアダプター(IDirect3D9 :: GetAdapterCount、IDirect3D9 :: GetAdapterIdentifier)を列挙しようとしましたが、機能しません。報告されているGPUは1つだけです(使用中のもの)。

26
Smohn Jith

http://www.nvidia.com/object/LO_optimus_whitepapers.html のOptimusホワイトペーパーは、GPUへの切り替えが行われる前に何が必要かについて正確に不明です。ホワイトペーパーには、DX、DXVA、およびCUDA呼び出しが検出され、GPUがオンになると記載されています。ただし、それに加えて、決定はNVIDIAによって維持されているプロファイルに基づいており、もちろん、ゲーム用のプロファイルはまだ存在していません。

試してみる1つのことは、たとえばcuInit(0);へのCUDA呼び出しを行うことです。 DXやDXVAとは対照的に、Intel統合グラフィックスがそれを処理する方法がないため、GPUへの切り替えを強制する必要があります。

5
Roger Dahl

http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf によると、302ドライバーから始めて、次のライブラリのいずれかと静的にリンクするだけで十分です。 vcamp110.dllvcamp110d.dllnvapi.dllnvapi64.dllopencl.dllnvcuda.dllcudart *。*、またはプログラムでNvOptimusEnablement変数をエクスポートするには:

extern "C" {
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}
37
DikobrAz