Single page Print

Introducing the Optimus routing layer
Thankfully, Windows 7 is much more accommodating than Vista. Microsoft's latest OS supports multiple graphics adapters, allowing independent Nvidia and Intel display drivers to coexist peacefully on the same system. These drivers don't talk to each other, so there's no need for multi-vendor cooperation, interposters, or custom APIs. In fact, with Windows 7, switching graphics doesn't even require the user to touch a switch—one is built into what Nvidia calls its Optimus routing layer.

This routing layer includes a kernel-level library that maintains associations between certain classes and objects and a corresponding graphics adapter. Graphics workloads that are deemed GPU-worthy are routed to the discrete graphics processor, while simpler tasks are sent to the IGP. The routing layer can process workloads from multiple client applications, juggling the graphics load between the integrated and discrete GPUs.


Optimus in flowchart form. Source: Nvidia

Nvidia says the Optimus routing layer keys in on three classes of workloads: general-purpose computing apps, video playback, and games. When an application explicitly tries to leverage GPU computing horsepower using a CUDA or OpenCL call, the Optimus routing layer directs the workload to the discrete GPU. The DirectX Video Acceleration (DXVA) calls used by many video playback applications and even the latest Flash beta are also detected automatically and directed accordingly. For games, the routing layer is capable of keying in on DirectX and OpenGL graphics calls.

Not all games that use those two APIs require the power of a discrete GPU, though. Even Solitaire makes DirectX calls, and it's more than happy running on an antiquated GMA. Rather than assuming that all DirectX or OpenGL calls need to be offloaded to a discrete GPU, Optimus references a profile library to determine whether a game requires extra grunt.

Nvidia already uses profiles to govern the behavior of its SLI multi-GPU teaming scheme, but Optimus is a little more advanced. The profiles are stored in encrypted XML files outside the graphics driver, and users have the option of letting Nvidia push out updates to those profiles automatically. Nvidia has apparently been working on the back end for this profile updating system for quite a while now, and it's something that's likely include "other profiles" in the future. (SLI anyone?)


The tinfoil hat crowd will be pleased to note that users are free to disable Optimus' automatic profile updates. Those who would rather manage graphics preferences themselves can create and modify profiles via the driver control panel, through which any application can be configured to run on the IGP or the discrete GPU. Users can even right-click on an application and manually select which graphics processor it'll use.


Allowing users to manage their own Optimus profiles is definitely the right thing to do. That said, one element of the profile management scheme could use a little extra work. At present, there's no way to override the Optimus routing layer's desire to process DXVA calls on a system's discrete GPU. One can configure the profile for a video playback application or web browser to use only the integrated graphics processor, but as soon as HD or Flash video playback begins, the GPU persistently takes over. Nvidia is looking at letting users override Optimus' preferences for video playback acceleration, and I hope that capability is exposed to users soon. GeForce GPUs may do an excellent job of accelerating video playback, but some Intel IGPs share the same functionality and probably consume less power. At least with the old switchable graphics approach, users could turn off the discrete GPU and be confident that it was going to stay off.