Multi GPU Support

mradr

Distinguished
Oct 12, 2011
12
2
18,515
Maybe someone can point me to a good read, but I always had this question in my head - but why is multi GPU still up to the developer to implement and not something that just works base off the the card's task manager to assign work out? This way simply supporting "DX13" granted you a boost in hardware scaling (even if it wasn't 100% scaling but a more modest 80% scaling).

I guess I just don't understand how the current cards work isn't expanding just over a "NV-Link" and process much like if it was just a bigger card instead?

NVIDIA-Turing-GPU-1-1030x943.png


From this image we can see everything is already split into different section. Each section doing a type of job for that core type. There is a master task engine in there that split each function call and then assigns it to that core to do the work. If we was to expand on this - why don't we send that same information directly to another care to do async functions as well splitting the work on two cards. "Well what if card 2 takes longer" - well it actually wouldn't matter because you be waiting either way for xx function to complete. So unless the card isn't about the same performance level as card 1 - you should get about the same amount or more work done that card 1 is doing.

I guess what I am saying is just create a interconnect that connects memory and the different cores such as they appear as one unit instead. My understand AMD might be doing something like this with their CPUs already - so why can't we do this at a "larger" scale between two GPUs instead?

Or is there a underlyn understanding I am not understanding that a developer has to make happen that code/hardware can't just understand to do on its own?
 
Solution
Well, I can't really link ya to a article, but how game engines work with Direct X12 and Traditional Directx 11 and older, sort of a rough and dumbed down version of it anyway.

DX12:

Well a game Developer has to specify how each card can render what, and how much each card can render, such as a racing gaming GPU#1 can render the Sky, Clouds, Grass or Buildings, where GPU#2 can render the Cars, the Road, The People, Particles. DX12 can render each and different parts of a games scene where DX11 thats not really possible.

DX12 has the potential to be really good and can not be forced as every engine is different in how they can render this or that, if all games were on the same engine then I can see it being widely optimised.
I can...
Well, I can't really link ya to a article, but how game engines work with Direct X12 and Traditional Directx 11 and older, sort of a rough and dumbed down version of it anyway.

DX12:

Well a game Developer has to specify how each card can render what, and how much each card can render, such as a racing gaming GPU#1 can render the Sky, Clouds, Grass or Buildings, where GPU#2 can render the Cars, the Road, The People, Particles. DX12 can render each and different parts of a games scene where DX11 thats not really possible.

DX12 has the potential to be really good and can not be forced as every engine is different in how they can render this or that, if all games were on the same engine then I can see it being widely optimised.
I can better explain DX11 then what I can DX12.

Now game developers can directly access the graphics hardware with the new API, so the CPU wont be a big problem, but since the dev can access the graphics hardware directly, with multi GPU's the dev now has to spend more time to tell what GPU to render what, and the other to render that, More work.

Tho this don't mean you can run high end cards with a low end CPU as the CPU will still have to do other things like physics calculations or among them things, but adding in another GPU should not increase the CPU load like in the older API's.

DX11 and older:

AFR (Alternate Frame Rendering) which is the basic mode of how multi video cards work, GPU#1 renders even frames, GPU#2 renders odd frames

AFR2 (alternate Frame Rendering 2) This is pretty much the same as AFR but GPU#1 renders odd frames and GPU#2 renders even frames

SFR (Split Frame Rendering) GPU#1 renders the Top while GPU#2 renders the Bottom

With DX11 and older you can force multi GPU's to work most of the time if the titles do not support it and it will just work, but then you can get flickering or high frame latency or a lot of tearing with SFR if a certin game engine doesn't like AFR, AFR2 or SFR. With how these older API's work, they don't care whats on the screen and they will render it or atleast try too.

DX11 and older they way the API works it will have to to wait on the CPU to keep up, thats why adding in more video cards and it scales pretty well, the higher the CPU demand is.

I played Battlefield 1 (DX11) with an i7 3770s and a single GTX 780TI, CPU was around 60% utilised whith the 780 maxed out all the time, With another GTX 780ti added in, the CPU pegged its self at 100% all the time and the graphics cards were only at a max of 60%, to the performance increase was there but not huge since my CPU held the cards back as DX11 API and older, more GPU horse power the more it has to communicate with the CPU.




Now Im sure there are other methods on how DX12 will render, im sure they may come up with a AFR mode if they don't have that already, I my self haven't been keeping up on the newest API's.

I hope this helps, and im sure someone might add to it.
 
Solution