WindowsサーバーOSのためのGPUアクセラレーション

HDX 3D Pro機能により、WindowsサーバーOSのセッションで実行しているグラフィック処理アプリケーションで、サーバー上のGPU(Graphics Processing Unit)リソースを使用できるようになります。OpenGL、DirectX、Direct3D、およびWindows Presentation Foundation(WPF)の処理をサーバーのGPUに移すことで、グラフィック処理によりサーバーのCPU速度が低下することを回避できます。また、ワークロードがCPUとGPUで分担されるため、サーバーでより多くのグラフィック処理が可能になります。

Windows Serverはマルチユーザーオペレーティングシステムなので、XenAppによってアクセスされるGPUは複数のユーザーによって共有でき、GPU仮想化(vGPU)の必要はありません。

このトピックの説明にはレジストリの編集が含まれています。レジストリエディターの使用を誤ると、深刻な問題が発生する可能性があり、Windowsの再インストールが必要になる場合もあります。レジストリエディターの誤用による障害に対して、シトリックスでは一切責任を負いません。レジストリエディターは、お客様の責任と判断の範囲でご使用ください。また、レジストリファイルのバックアップを作成してから、レジストリを編集してください。

GPU共有

GPU共有により、リモートデスクトップセッションで動作するOpenGLアプリケーションおよびDirectXアプリケーションでGPUハードウェアによるレンダリング処理が可能になります。これにより、以下の効果があります。

  • ベアメタルまたは仮想マシン上で使用でき、アプリケーションのスケーラビリティとパフォーマンスが向上します。
  • 複数の同時接続セッションでGPUリソースを共有できます(ほとんどのユーザーは専用GPUのレンダリングパフォーマンスを必要としません)。
  • 特別な設定は必要ありません。

複数のGPUを持つグラフィックカードを装着したり、複数のグラフィックカードを装着したりして、ハイパーバイザー上に複数のGPUをインストールして各GPUを特定の仮想マシンに(1対1で)割り当てることができます。ただし、サーバー上で異なるグラフィックカードを混在させることは推奨されません。

仮想マシンでは、GPUへの直接パススルーアクセスが必要です。この機能は、Citrix XenServer、VMware vSphere vDGA、およびIntel GVT-dで提供されます。HDX 3D ProとGPUパススルーを併用すると、サーバー上の各GPUで単一のマルチユーザー仮想マシンをサポートできます。

GPU共有は、特定のグラフィックカードに依存するものではありません。

  • ハイパーバイザー上では、そのハイパーバイザーのGPUパススルー機能でサポートされるハードウェアプラットフォームとグラフィックカードを選択してください。XenServerのGPUパススルー機能でテストされたハードウェアの一覧については、「GPU Pass-through Devices」を参照してください。
  • ベアメタルを実行するときは、オペレーティングシステムで単一のディスプレイアダプターを有効にすることをお勧めします。複数のGPUがハードウェアに取り付けられている場合は、デバイスマネージャーを使用して1つだけ残して無効にします。

GPU共有でのスケーラビリティは、以下の要素により異なります。

  • 実行するアプリケーション
  • 消費されるビデオRAMの量
  • グラフィックカードの処理能力

一部のアプリケーションでは、ビデオRAMの不足をより効果的に処理できます。ハードウェアの負荷が過剰になると、グラフィックカードドライバーが不安定になったり異常停止したりすることがあります。このような問題を避けるには、同時接続ユーザーの数を制限してください。

GPUアクセラレーションが正しく動作しているかどうかを確認するには、GPU-Zなどのサードパーティ製ツールを使用できます。このツールは、https://www.techpowerup.com/gpuz/で提供されています。

DirectX、Direct3D、およびWPFレンダリング

DirectX、Direct3D、およびWPFレンダリングは、DDI(Display Driver Interface)Version 9ex、10、または11をサポートするGPUが搭載されたサーバーでのみ使用可能です。

  • Windows Server 2008 R2では、DirectXおよびDirect3Dで単一GPUを使用するために特別な設定は不要です。
  • Windows Server 2016およびWindows Server 2012のRD Session Hostサーバー上のリモートデスクトップサービス(RDS)セッションでは、デフォルトのアダプターとしてMicrosoft基本レンダリングドライバーが使用されます。Windows Server 2012上のRDSセッションでGPUを使用するには、グループポリシーの[ローカルコンピューターポリシー]>[コンピューターの構成]>[管理用テンプレート]>[Windowsコンポーネント]>[リモートデスクトップサービス]>[リモートデスクトップセッションホスト]>[リモートセッション環境]で[Use the hardware default graphics adapter for all Remote Desktop Services sessions]を有効にします。
  • WPFアプリケーションでのレンダリングにサーバーのGPUが使用されるようにするには、WindowsサーバーOSセッションを実行するサーバー上で以下のレジストリキーを設定します。
    • [HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\Multiple Monitor Hook] “EnableWPFHook”=dword:00000001
    • [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\CtxHook\AppInit_Dlls\Multiple Monitor Hook] “EnableWPFHook”=dword:00000001

CUDAまたはOpenCLアプリケーション用のGPUアクセラレーション機能

ユーザーセッションで実行中のCUDAおよびOpenCLアプリケーションのGPUアクセラレーションは、デフォルトで無効です。

CUDAアクセラレーションPOC機能を有効にするには、以下のレジストリを設定します。

  • [HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\Graphics Helper] “CUDA”=dword:00000001
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\CtxHook\AppInit_Dlls\Graphics Helper] “CUDA”=dword:00000001

OpenCLアクセラレーションPOC機能を有効にするには、以下のレジストリを設定します。

  • [HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\Graphics Helper] “OpenCL”=dword:00000001
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\CtxHook\AppInit_Dlls\Graphics Helper] “OpenCL”=dword:00000001

WindowsサーバーOSのためのGPUアクセラレーション