GPU acceleration for Windows multi-session OS
HDX 3D Pro allows graphics-heavy applications running in Windows Multi-session OS sessions to render on the server’s graphics processing unit (GPU). By moving OpenGL, DirectX, Direct3D, and Windows Presentation Foundation (WPF) rendering to the server’s GPU, the server’s CPU is not slowed by graphics rendering. Additionally, the server is able to process more graphics because the workload is split between the CPU and GPU.
Since Windows Server is a multi-user operating system, a GPU accessed by Citrix Virtual Apps can be shared by multiple users without the need for GPU virtualization (vGPU).
For procedures that involve editing the registry, use caution: Editing the registry incorrectly can cause serious problems that may require you to reinstall your operating system. Citrix cannot guarantee that problems resulting from the incorrect use of Registry Editor can be solved. Use Registry Editor at your own risk. Be sure to back up the registry before you edit it.
GPU Sharing enables GPU hardware rendering of OpenGL and DirectX applications in remote desktop sessions; it has the following characteristics:
- Can be used on bare metal or virtual machines to increase application scalability and performance.
- Enables multiple concurrent sessions to share GPU resources (most users do not require the rendering performance of a dedicated GPU).
- Requires no special settings.
You can install multiple GPUs on a hypervisor and assign VMs to each of these GPUs on a one-to-one basis: either install a graphics card with more than one GPU, or install multiple graphics cards with one or more GPUs each. Mixing heterogeneous graphics cards on a server is not recommended.
Virtual machines require direct passthrough access to a GPU, which is available with Citrix XenServer, VMware vSphere vDGA and Intel GVT-d. When HDX 3D Pro is used with GPU Passthrough, each GPU in the server supports one multi-user virtual machine.
GPU Sharing does not depend on any specific graphics card.
- When running on a hypervisor, select a hardware platform and graphics cards that are compatible with your hypervisor’s GPU Passthrough implementation. The list of hardware that has passed certification testing with XenServer GPU Passthrough is available at GPU Passthrough Devices.
- When running on bare metal, it is recommended to have a single display adapter enabled by the operating system. If multiple GPUs are installed on the hardware, disable all but one of them using Device Manager.
Scalability using GPU Sharing depends on several factors:
- The applications being run
- The amount of video RAM they consume
- The graphics card’s processing power
Some applications handle video RAM shortages better than others. If the hardware becomes extremely overloaded, this could cause instability or a crash of the graphics card driver. Limit the number of concurrent users to avoid such issues.
To confirm that GPU acceleration is occurring, use a third-party tool such as GPU-Z. GPU-Z is available at http://www.techpowerup.com/gpuz/.
- Access to a high-performance video encoder for NVIDIA GPUs and Intel Iris Pro graphics processors. This feature is controlled by a policy setting (enabled by default) and allows the use of hardware encoding for H.264 encoding (where available). If such hardware is not available, the VDA fall backs to CPU-based encoding using the software video codec. For more information, see Graphics policy settings.
DirectX, Direct3D, and WPF rendering
DirectX, Direct3D, and WPF rendering is only available on servers with a GPU that supports a display driver interface (DDI) version of 9ex, 10, or 11.
- On Windows Server 2008 R2, DirectX and Direct3D require no special settings to use a single GPU.
- On Windows Server 2016 and Windows Server 2012, Remote Desktop Services (RDS) sessions on the RD Session Host server use the Microsoft Basic Render Driver as the default adapter. To use the GPU in RDS sessions on Windows Server 2012, enable the Use the hardware default graphics adapter for all Remote Desktop Services sessions setting in the group policy Local Computer Policy > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Remote Session Environment.
- To enable WPF applications to render using the server’s GPU, create the following settings in the registry of the server running Windows Multi-session OS sessions:
- [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
GPU acceleration for CUDA or OpenCL applications
GPU acceleration of CUDA and OpenCL applications running in a user session is disabled by default.
To use the CUDA acceleration POC features, enable the following registry settings:
- [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
To use the OpenCL acceleration POC features, enable the following registry settings:
- [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