19

質問

さまざまなマルチGPU構成(および場合によってはXPから7までのさまざまなWindowsバージョン)のマシンで実行されるOpenGLアプリケーションがあります。GPUの組み合わせとは無関係にOpenGLレンダラーとして機能する特定のGPUを選択する一般的な方法はありますか(たとえば、NVIDIA + NVIDIA、NVIDIA + AMD、NVIDIA + Intelなど)?これは、アプリケーションコードから、つまりC ++で直接適用できるソリューション、またはエンドユーザーの介入なしにアプリケーションから呼び出されるスクリプトである必要があります。

以下は、非常に具体的なケースから始めて、解決策を見つけるために私が行ったいくつかのテストの詳細ですが、すべてまたはほとんどの場合に機能する解決策があるかもしれません。

どのGPUがOpenGLレンダリングを実行するかを強制する信頼できる方法はありますか?

ヒントは大歓迎です。前もって感謝します!

考えられる解決策を試しました

2つのNVIDIAQuadroを搭載したWindowsXP64

2枚のQuadroカードの組み合わせによるテスト

  • Quadro FX 1700 + Quadro FX 570
  • Quadro FX 1700 + Quadro FX 540
  • Quadro FX 1700 + Quadro NVS 285

Windows XP 64ビットで同じドライバ(バージョン275.36)を使用して、次のようなさまざまな方法で比較的成功しました。

  • ドライバーに決めさせる。
    このソリューションは、両方のカードが同じドライバーを使用し、目的のカードを使用することを決定した場合にのみ有効です。したがって、それは具体的すぎて、おそらく予測不可能です。

  • ドライバーに決定させる前に、 NVAPIを使用してコード内のドライバー設定を変更します。
    このソリューションでは、理論的にはドライバーに希望どおりに決定させることができますが、難しいので、両方のカードが同じドライバーを使用し、常に機能するとは限りません(FX 1700 + NVS 285では機能しません)。

  • メイン画面の変更。
    これには、デフォルトで、選択したメイン画面でアプリケーションが開くという効果があります。このソリューションは、FX 1700 +FX570の組み合わせでのみ機能します。FX 1700 + FX 540では、レンダラーはメイン画面とは関係なくドライバー設定に依存し、FX 1700 + NVS 285では、レンダラーは常にFX1700です。

  • ウィンドウが特定の画面にあるときにOpenGLコンテキストを作成します。
    ウィンドウは、メインがメインであるかどうかに関係なく、目的の画面で作成できますが、上記の解決策と同じ問題があります。

  • 目的のグラフィックカードの画面のみを有効にしてから、他の画面のみを有効にして、OpenGLコンテキストを作成します。
    これは、レンダラーとしてNVS 285を使用するために私が見つけた唯一の方法ですが、それは醜く、自動化できるかどうか、またはすべての場合に機能するかどうかはわかりません。

  • WGL_NV_gpu_affinity拡張機能を使用してレンダリングGPUを選択しようとしています。
    FX1700とFX570の組み合わせにより、拡張機能は両方のGPUに互換性があると報告し、レンダリングを一方にのみ制限できます。FX 1700 + FX 540ペアでは、拡張機能は互換性のあるGPUを1つだけ報告します。これは、ドライバーがOpenGLレンダリングに使用することを決定したものです。FX 1700 + NVS 285の組み合わせでは、常にFX 1700のみが報告されます(NVS 285は、使用中の唯一のカードである場合でも拡張機能によって報告されないため、この拡張機能をサポートしていないと思います)。

IntelおよびAMDを搭載したWindows764

このシステムはWindows764ビットで動作し、グラフィックカードは1つのIntel HD Graphics 2000(CPU(Sandy Bridge)に統合)と1つのAMD Radeon HD 6450です。いずれの場合も、レンダリングは両方の画面で機能しますが、レンダリングGPUは異なります。いくつかの変数に応じて:

  • メイン画面がAMDに接続されていて、この画面でウィンドウが開いている場合、AMDがレンダラーです。
  • メイン画面がAMDに接続されていて、ウィンドウが他の画面で開かれている場合、レンダラーは「GDI Generic」であり、非常に低速です。
  • メイン画面がIntelに接続されている場合、ウィンドウが開いている場所に関係なく、Intelがレンダラーになります。

このシステムを使用して、OpenGLフォーラムで提案されたソリューションも試しました。TL; DR:OpenGLで使用されるドライバーを選択するのはハッキーな方法なので、異なるドライバーを使用するGPUから選択できますが、同じドライバーを使用するカードからは選択できません。次の結果が得られました。

  • メイン画面がAMDに接続されている場合、レンダラーとして任意のGPUを選択できます。
  • メイン画面がIntelに接続されている場合、レンダラーとしてIntelを選択できますが(これは自動であるため役に立たない)、AMDを選択しようとするとエラーが発生します。これはドライバーのバグかもしれないと思います。
4

1 に答える 1

5

nvidia Quadro カードを使用しているため、WGL_NV_gpu_affinity拡張機能を使用して GPU を選択できます。

ATIチップについてはよくわかりませんが、 AMD_gpu_associationだと思います

于 2011-06-10T13:38:49.710 に答える