Radeon Crossfire coding Info now on GPUOPEN.COM

Discussion in 'AMD Flavor' started by Yakk, May 5, 2016.

  1. Yakk

    Yakk [H]ardness Supreme

    Messages:
    5,810
    Joined:
    Nov 5, 2010
    Came across this tidbit of information about Crossfire posted on gpuopen.com :

    AMD Crossfire API – GPUOpen

    While not many people who come here may code, it's still a great read. For those so inclined there's even some sample code if you want to try your hand at programming some basic Crossfire goodness.

    Have to give a +1 to TRG for posting something like this for everyone, awesome!
     
  2. Pieter3dnow

    Pieter3dnow [H]ardness Supreme

    Messages:
    6,789
    Joined:
    Jul 29, 2009
    from that website :


    AMD Crossfire API
    Posted on May 5, 2016 by Anas Lasram
    Crossfire, Crossfire API, DX11, GCN, MGPU
    Gaming at optimal performance and quality at high screen resolutions can sometimes be a demanding task for a single GPU. 4K monitors are becoming mainstream and gamers wishing to benefit from the quality provided by 8 million pixels at comfortable frame rates may need a second GPU in their system to maximize their playing experience. To ensure that performance scales with multiple GPUs some work is usually required at the game implementation level.

    Alternate Frame Rendering (AFR) is the method used to take advantage of Multiple GPUs in DirectX® 11 and OpenGL® applications. TheCrossfire guide describes AFR and how it is implemented in AMD drivers. The guide also provides recommendations on how to optimize a game engine to fully exploit AFR. As described in the guide the goal is to avoid inter-frame dependencies and resource transfers between GPUs. Transfers are initiated by the driver whenever it determines that a GPU has a stale resource. Transfers go through the PCI Express® bus and this is usually an expensive operation.

    The Crossfire guide describes the limitations of the default AFR implementation. In summary:

    • The driver does not know what resources need tracking. It therefore tracks all of them by default.
    • The driver does not have knowledge of what region in a resource is updated. If a resource is stale all of it will be transferred.
    • The driver has to start the transfer at the end of the frame even if the resource is only used at the beginning of the frame.
    • The driver uses heuristics to detect if a resource is stale. The heuristics can fail resulting in rendering artifacts.