Selecting the Best Graphics Device to Run a 3D Intensive Application

Many gaming and workstation laptops are available with both (1) integrated power saving and (2) discrete high performance graphics devices. Unfortunately, 3D intensive application performance may suffer greatly if the best graphics device is not selected. For example, a game may run at 30 Frames Per Second (FPS) on the integrated GPU rather than the 60 FPS the discrete GPU would enable. As a developer you can easily fix this problem by adding only one line to your executable’s source code:

extern "C" { _declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; }

Yes, it’s that easy. This line will ensure that the high-performance graphics device is chosen when running your application.

Requirements

It is worth noting some simple requirements for this method to work:

  1. The graphics-intensive application should use either DirectX® or OpenGL®
  2. The laptop should be a legacy PowerXpress or modern Hybrid Graphics laptop with integrated and discrete graphics devices
  3. Executable should be statically linked. Adding the above piece of code in a dynamically linked library will not work.

Generally, modern PC games meet all of the above requirements with few exceptions for light workloads such as MineSweeper and Solitaire.

However, these instructions do not apply to Vulkan™ or OpenCL™ applications. In short, the AMD Vulkan™ Installable Client Driver (ICD) sorts its devices in descending order by a performance heuristic function. Conversely, the AMD OpenCL™ ICD does not sort its devices.

Radeon Additional Settings

Have you ever noticed higher performance while your laptop was Plugged-In to AC wall power? Surprisingly, this may be due to your Radeon Additional Settings!

Switchable Graphics Global Settings

First, users may assign one of the following Global Application Settings to Battery or Plugged-In Power Sources:

  1. Force Power-Saving Graphics
  2. Optimize Power Savings (Battery Default)
  3. Optimize Performance (Plugged-In Default)
  4. Maximize Performance

Consequently, these settings have a very large impact on battery life. Thus, I do not recommend changing these settings.

Switchable Graphics Application Settings

Second, users may assign one of the following Graphics Settings to an application:

  1. High Performance
  2. Power Saving
  3. Based on Power Source
  4. Not Assigned

Conveniently, the graphics driver includes a list of common games and applications — most of which can be changed by the user. Moreover, the user can add applications.

Most noteworthy, the application setting lookup uses only the executable file name, excluding its path. Thus, it is best to avoid generic names or names of other known common applications such as “game.exe”, “player.exe”, or “launcher.exe”.

Thankfully, if the application is “Not Assigned”, then the graphics driver will still test if the executable requested high performance graphics. In practice, the driver searches for “AmdPowerXpressRequestHighPerformance” in the executable’s export table. In fact, you can easily test this yourself using a Microsoft Visual Studio tools command prompt:

dumpbin.exe /exports app.exe | find.exe "AmdPowerXpressRequestHighPerformance"

Switchable Graphics Settings Summary

For simplicity, below is a table for which GPU is selected based global and application settings:

Global SettingApplication SettingSelected GPU
Force Power-Saving GraphicsNot AssignedPower-Saving
 High PerformancePower-Saving
 Power SavingPower-Saving
 Based on Power SourcePower-Saving
Optimize Power SavingsNot AssignedPower-Saving
 High PerformanceHigh Performance
 Power SavingPower-Saving
 Based on Power SourcePower-Saving
Optimize PerformanceNot AssignedPower-Saving
 High PerformanceHigh Performance
 Power SavingPower-Saving
 Based on Power SourceHigh Performance
Maximize PerformanceNot AssignedHigh Performance
 High PerformanceHigh Performance
 Power SavingPower-Saving
 Based on Power SourceHigh Performance

Finally, I have observed applications whose performance increased by 80% simply by adding AmdPowerXpressRequestHighPerformance. Thus, I highly recommend this solution.

Ken Mitchell

Ken Mitchell

Ken Mitchell is a Member of Technical Staff in the Radeon Technologies Group/AMD ISV Game Engineering team where he focuses on helping game developers utilize AMD CPU cores efficiently. Previously, he was tasked with automating & analyzing PC applications for performance projections of future AMD products. He studied computer science at the University of Texas at Austin. Links to third party sites are provided for convenience and unless explicitly stated, AMD is not responsible for the contents of such linked sites and no endorsement is implied.

Enjoy this blog post? If you found it useful, why not share it with other game developers?

You may also like...

Getting started: our software

New or fairly new to AMD’s tools, libraries, and effects? This is the best place to get started on GPUOpen!

Getting started: development and performance

Looking for tips on getting started with developing and/or optimizing your game, whether on AMD hardware or generally? We’ve got you covered!

If slide decks are what you’re after, you’ll find 100+ of our finest presentations here. Plus there’s a handy list of our product manuals!

Developer guides

Browse our developer guides, and find valuable advice on developing with AMD hardware, ray tracing, Vulkan, DirectX, UE4, and lots more.

Words not enough? How about pictures? How about moving pictures? We have some amazing videos to share with you!

The home of great performance and optimization advice for AMD RDNA™ 2 GPUs, AMD Ryzen™ CPUs, and so much more.

Product Blogs

Our handy product blogs will help you make good use of our tools, SDKs, and effects, as well as sharing the latest features with new releases.

Publications

Discover our published publications.