1
\$\begingroup\$

What is available to game developers to take advantage of implicit multi-GPU rendering technologies as of 2016? For this question I will only be asking about Nvidia's SLI and AMD's Crossfire technologies as they apply to rendering in OpenGL and Direct3D, specifically non-ancient versions of these APIs like OpenGL core 3.3+ and Direct3D 10.0+.

What tools do developers have access to, to programmatically detect and alter the state of implicit multi-GPU rendering for their game?

A key component of this question is what is openly available to independent developers, SLI and Crossfire aren't problems to AAA developers who get GameReady drivers tweaked to enhance the performance of their game and have SLI profiles included within the driver. What is available for smaller developers to take advantage of multiple GPUs?

At the very least, is there anything that developers can do to reduce the negative effects that these technologies can cause? Is there a way to avoid a FPS drop or artifacts that come with SLI/Crossfire bugs, can a developer programmatically disable SLI or Crossfire?

With all of this, how is the cross-platform support? Is there a solution for these issues that will work across Windows, Linux, and OSX? Will it work with OpenGL and Direct3D? Can it run out of the box or packaged with your game?

\$\endgroup\$

1 Answer 1

2
\$\begingroup\$

With all the research I've done on this topic looking for modern solutions, this is as much I could find available to independent developers available as of early 2016 for SLI and CrossFire:

Windows + CrossFire + AGS for Direct3D (Allows for some explicit control)

I was really impressed with what AMD had done for Windows with their AMD GPU Services API which allows for explicit control over CrossFire configuration on GCN-based (HD 7000+) GPUs when using Direc3D 11. They have good documentation, a getting started guide, and samples.

Windows + CrossFire for OpenGL and Direct3D

You don't get any explicit control, but there are things you can do to make your game more friendly for CrossFire Alternate Frame Rendering, even for OpenGL. They have a couple guides on optimizing your game for AMD GPUs and CrossFire. You may be able to increase the performance of your game just by requesting that the AMD drivers try to use CrossFire AFR on your game be renaming the executable to AFR-FriendlyOGL.exe or AFR-FriendlyD3D.exe.

Windows + SLI + NVAPI for Direct3D

The Nvidia NVAPI allows developers the ability to query some information about the current SLI configuration and use that information to better configure their rendering engine. Functions like NvAPI_D3D_GetCurrentSLIState allow you to query some information about the SLI AFR configuration if you are using Direct3D 10+.

Windows + SLI for OpenGL and Direct3D

Nvidia provides a best practices guide for SLI AFR (Alternate Frame Rendering) and SFR (Split Frame Rendering). Which appears you can influence the Nvidia drivers in a similar way as the AMD drivers by renaming your executable to AFR-FriendlyD3D.exe. There is also, the Nvidia GPU programming guide which will help you optimize your game for Nvidia GPUs which will naturally help your SLI compatibility and performance as well.

Linux + SLI or Crossfire for OpenGL

Nvidia and AMD are on a fairly equal playing field here. SLI and CrossFire are practically impossible to get working even for AAA titles, it takes a lot of user configuration to get SLI or CrossFire working slightly. In most cases performance goes down or introduces terrible graphics issues when SLI or CrossFire are enabled. Implicit multi-GPU support just doesn't work here yet, at least not consistently enough for you to depend on it for your game. This is an issue that I hope to see change soon in the future as many enthusiasts and VR users are making a move to Linux and SteamOS to tinker in a more open space.

Mac OSX + SLI or Crossfire for OpenGL

Support for this is worse than on Linux for the most part, but it doesn't seem like it will be a necessity. The cheapest computer running OSX with two GPUs starts at $3,000 USD and ships with two workstation GPUs (FirePro) realistically anyone looking to spend that much money on a computer for games isn't going to buy a mac in the first place.

In closing, multi-GPU support for games today isn't great but it's getting easier to build games for enthusiast grade hardware, and if you really care about getting that much more performance APIs like Vulkan and Direct3D 12 look like they will provide some great explicit multi-GPU support.

\$\endgroup\$
1
  • \$\begingroup\$ It would seam that basic concurrent processing techniques would be paramount for implicit multi-gpus. Making sure to avoid f'( f( null, 0 ), dt ) type updates, where the next frame is computed based on the immediately previous frame, would go a long way to increasing the programs efficient utilization. The biggest challenge would appear to be querying the system to find out how many cards are being used so that algorithms can be adjusted accordingly. \$\endgroup\$
    – Zixradoom
    Mar 3, 2017 at 2:18

You must log in to answer this question.