DirectXゲームをプログラミングしていますが、Optimusラップトップで実行すると、Intel GPUが使用されるため、パフォーマンスが低下します。コンテキストメニューを使用するか、実行可能ファイルの名前をbf3.exeまたはその他の有名なゲーム実行可能ファイル名に変更してNVIDIA GPUを強制すると、パフォーマンスは期待どおりになります。
明らかに、どちらもゲームを再配布する必要がある場合の許容できる解決策ではないので、プログラムでラップトップにNVIDIA GPUを使用させる方法はありますか?
DirectXを使用してアダプター(IDirect3D9 :: GetAdapterCount、IDirect3D9 :: GetAdapterIdentifier)を列挙しようとしましたが、機能しません。報告されているGPUは1つだけです(使用中のもの)。
http://www.nvidia.com/object/LO_optimus_whitepapers.html のOptimusホワイトペーパーは、GPUへの切り替えが行われる前に何が必要かについて正確に不明です。ホワイトペーパーには、DX、DXVA、およびCUDA呼び出しが検出され、GPUがオンになると記載されています。ただし、それに加えて、決定はNVIDIAによって維持されているプロファイルに基づいており、もちろん、ゲーム用のプロファイルはまだ存在していません。
試してみる1つのことは、たとえばcuInit(0);
へのCUDA呼び出しを行うことです。 DXやDXVAとは対照的に、Intel統合グラフィックスがそれを処理する方法がないため、GPUへの切り替えを強制する必要があります。
http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf によると、302ドライバーから始めて、次のライブラリのいずれかと静的にリンクするだけで十分です。 vcamp110.dll、vcamp110d.dll、nvapi.dll、nvapi64.dll、opencl.dll、nvcuda.dll、cudart *。*、またはプログラムでNvOptimusEnablement変数をエクスポートするには:
extern "C" {
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}