How is GPU affinity decided in a Multi-GPU configuration?

expert_vision

Distinguished
May 2, 2010
36
2
18,535
In a Win 7 system with multiple different video cards (NON-SLI or NON-CROSSFIRE), how is decided GPU affinity?

So you have 2 totally different video cards, each with it's own display and you launch a 3D app (a game). On which GPU is gonna run? Can you control GPU affinity?
 
Solution
I would assume GPU 1 will process the image on the screen attached to it, and GPU 2 would process the image for the screen attached to that if it is not in SLI or Crossfire.


That seems perfectly logical and obvious to me, too. It can't work any other way, physically impossible.

 

Traciatim

Distinguished


You would think that, but when I was testing monitor configs on my GTX670 and my Onboard Intel crap the screen would be rendered by the card that is running the primary display... so if you ran something in a window and move it to the secondary card's monitor the frame rate wouldn't be affected all that much... just a few percent, which I'm assuming is the delay needed to move the frame buffer in to main system memory for the on board to display it.

I think it's a little more complicated than "the pixels come from the card that the screen is plugged in to". Especially in scenarios where you have a window that spans multiple monitors.

I found out that the fastest configuration is always to have both monitors plugged in to the GTX670 and disable my on board. Even if the secondary monitor is only playing a video.

So for OP's question, I'm pretty sure the 3D application would actually render on the primary card, unless the software explicitly has some way to override (like it has a card selector in its settings). I'm not certain if this is the card that your BIOS screen is displayed on or just the one that windows has the primary display set to, I didn't test that...
 

expert_vision

Distinguished
May 2, 2010
36
2
18,535


No need, it was just a curiosity, wondering if I could split 3D apps between cards.
Anyway, I think Traciatim got it right .. everything is rendered on primary (unless the app is programed otherwise) and displayed on whichever screen by copying the frame buffer to the corresponding card.