デフォルトで高性能GPUで実行するようにアプリケーションを設定するにはどうすればよいですか?


12

現在、多くのラップトップには2つのGPUが搭載されています。1つは高性能のGPUで、もう1つは省電力のGPUです(それほど強力ではありません)。私のラップトップで使用するほとんどのアプリケーションは、統合された(省電力)GPUで実行されますが、それでも一部は高性能カードで開くように設定されています。デフォルトで高性能GPUで実行するように構築しているアプリを設定しようとしていますが、トピックに関する情報がどこにも見つかりません。誰かがこれに少し光を当てることができることを願っています。NSISインストーラーでアプリケーションを配布しますが、NVidia / ATIカードのアプリケーションのリストにアプリケーションのパスを追加する必要があると思います。アプリケーションはC#でプログラムされています。また、デスクトップPCで物事がどのように機能するかを知っている人はいますか?PCに2つのGPUがあり、より強力なGPUを選択する必要がある場合はどうなりますか?

ミルチョ

回答:


7

:NVIDIAは、あなたのために役立つかもしれないいくつかの戦略を概説し、ここで文書持ってhttp://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf残念ながら、私はそうでないことをお勧め1 - - NvOptimusEnablementをexport-C ++についてのみ文書化されています。C#でこれを行うことも可能かもしれませんが、実際に知っている人はその情報に耳を傾ける必要があります。

AMDに似たものはありません。

残念ながら、ベンダーに依存しないこれを行う方法はないように見えます(ディスプレイデバイスを列挙しても、ユーザーがドライバーコントロールパネルを介して設定を強制することになります。完全に設定可能なグラフィック設定が付属していないゲーム)。そのようなことをしないと、readmeに頼り、人々が実際にそれを読むことを期待しなければならないかもしれません!


+1:このOptimusのNvOptimusEnablementトリックは知りませんでしたが、持っていなければなりません。最近のことのようですね(ドライバー302.x +)ありがとう。
ショーンミドルディッチ

1
stackoverflow.com/questions/17458803/…AMDの 同等品に興味がある他の人のために、私はこれを尋ねました(SOはゲーム固有ではないので)。
ショーンミドルディッチ

1
最後の手段として、p / invokeを使用してC#からC ++関数を呼び出すことができます。
BlueRaja-ダニーPflughoeft

@ BlueRaja-DannyPflughoeft-これはC ++関数ではありません。エクスポートされたグローバル変数です。
マキシマスミニマス

5

一般的にはできません。

デュアルGPUドライバーは2つのGPUを単一のインターフェースの背後に隠します。そのため、Nathan Reedのようなソリューションは通常、ほとんどの一般的な高速/低電力のデュアルGPUセットアップでは機能しません。

GPUの選択は、何らかの方法でドライバーによって処理される必要があります。NVIDIA Optimusでは、通常、EXEを右クリックして[プロパティ]をクリックすることにより、通常、Optimusプロファイルを更新して、ディスクリートGPUを使用するアプリケーションのリストにアプリケーションを追加します。いくつかの非常に特殊なオプティマスへの呼び出しを使用することもできます。mh01の答えによると。AMDセットアップでは、これはまったく異なります。

さらに他のシステムでは、ハードウェアスイッチまたはOSフラグを使用して、アクティブなGPUを決定します。繰り返しますが、アプリケーションはどのGPUを使用するかを制御できません。

これは、将来のDirectXアップデートで「修正」されることを本当に望んでいるものです。Nathanが提案したように両方のGPUが列挙され、それらのどちらが高速または低電力向けかを示すヒントがあるのが理想であるため、アプリケーションはインテリジェントに適切なものを選択したり、使用するデバイスを何に基づいて切り替えることもできます要因(たとえば、WebブラウザにWebGLの負荷に応じて選択させる)。


ああ、面白い。私はこれらのデュアルGPUシステムのいずれも使用していないので、ドライバーが同じであるふりをするのを知りませんでした。ドライバーは、特定のアプリのGPU使用率のレベルを監視し、必要に応じて高パフォーマンスのアプリに切り替えることができると思います。
ネイサンリード

1
できません。ハードウェアにはさまざまな機能があります。最大テクスチャサイズが2048のGPUから最大1024のGPU、またはその他の特性に切り替えた場合、アプリ全体が破損することを想像してください。いずれにせよ、より高性能なGPUに移行する場合、バッファーの移行(時間がかかり、不要なフレームヒッチが発生する)が必要になり、シェーダーの再コンパイルが必要になります。アプリはこのプロセスを担当し、スイッチをオプトインまたはオプトアウトする必要があります。残念ながら、そのためのAPIはまだ具体化されていません。
ショーンミドルディッチ

1
これは、バッテリーを節約するために、ユーザーがラップトップのGPU切り替えをオーバーライドすることが多いため、複雑です。これは、ラップトップの電源状態も認識しているため、GPUスイッチングをOSに委任することを好む理由の1つです。
偽の名前

4

システム上のGPUを列挙し、アプリケーションの起動時に使用するGPUを選択できるはずです。使用しているAPIについては言及しませんでしたが、たとえばD3D11ではIDXGIFactory :: EnumAdaptersを使用してGPUのリストを取得し、必要なものをD3D11CreateDeviceに渡します。

DXGIは、説明文字列、ベンダーID、デバイスIDなど、GPUに関するいくつかの限られた情報を提供します。この情報を使用して、どのGPUが高性能GPUであるかを判断できると思いますが、GPUの何らかのデータベースを構築するか、推測のために何らかの発見的手法を使用する必要があります。または、起動時に使用するGPUをユーザーに選択させることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.