DirectX 12

Of course I voted.
But how will DХ 12 help МSFS 2020?

I believe the main hope is that DX12 will take advantage of multi-core CPU’s rather than what we have now with one core being hammered by the main string.

Blockquote “DX12’s focus is on enabling a dramatic increase in visual richness through a significant decrease in API-related CPU overhead,” said Nvidia’s Henry Moreton last year.

For myself I have 4 cores sitting idle that I would like to see join in the workload.

Also other parts of the latest API that video card(s) can take advantage of.

If the folks at Asobo and Microsoft make all 16 cores of my i9-9900K work, I’ll give them a beer and wash all their cars. We’ll see…

I’ll give them a beer but skip the car washing. For too long, we’ve been getting these new CPUs with all these cores and our sims don’t efficiently use them. It would be really nice if that could change.

I’m getting FSX flashbacks… the horror…

2 Likes

Have a look in this thread, Post 15:

Good education.

DX12 can just as little look into the future as DX11 can but it can deal with the presence a little better.

CPU cores count in benchmarks and closed workload scenarios (CAD/3d-animation) but not in real time environments where the possible future changes every microsecond. @MSFSRonS brings that to the point.

I don’t agree with that. Yes, the simulation is linear and you can’t predict the future, but that doesn’t mean you cannot distribute workload over cores. For example, you could split up the flight model over several cores, with one thread computing a wing, another thread the other wing, some other thread the tail, etc. You can have a thread updating the weather. Another thread taking care of AI. Yet another thread taking care of scenery animation. And so on. There is no reason to cram all of these unrelated things into one single thread and then torture a single core with it. Split them up, distribute them over multiple cores, and then put all the data together at the end of each timestep.

How would you keep all these threads in sync? What master process ties all this together, and which core does this then run on?

Note that there is already a fair amount of work distributed across threads; if you watch your CPU graphs you’ll see low-level usage across every logical processor. This is most likely from parts of the code that are processing a lot of things in parallel because they’re easy to parallelize, while other parts of the code are harder to parallelize, either inherently or because of the existing codebase which was created when most CPUs had only 1 or 2 cores.

I’m also not at all convinced that the CPU usage of the graphics rendering thread is the blocking factor for most people; it seems to usually be the CPU usage of the main simulation thread which I don’t think will be affected by DX12 at all, or the GPU usage which won’t go down either.

There are also already separate threads for “manipulators” (control of AI vehicles etc), drawing of the glass displays, etc.

3 Likes

Yes, i agree with that. Seems like if there is any improvement to be had from DX12, Asobo first needs to split up the simulation thread into multiple pieces. As you say, that is probably one monolith for legacy reasons. And even without DX12, splitting that thread up will have a positive performance impact. But i cannot imagine it to be a trivial endeavour.

2 Likes

Thats what I want to say with my words. DX12 brings us probably not so many more frames but I beg it will bring us the same fps with more detail, better PG, better LOD :pray: again, better lighting, smoother displays, better frame interpolation, less morphing mesh, improved foveated rendering (while in cockpit it is not necessasary to render the terrain below or behind in high quality, aircraft windows are usually small) and so on and so on.

And dont forget VR.

2 Likes

Even Intel stated that with its Multithreading:

Having 2 Threads, which is 2 Logical Cores, working on a Core will not double the processing power/speed. The 2 Logicals have to share their common Core.

Intel stated that at best there may be 30% increase. And I think this figure included “Tile” processing while FS2020 is not “Tile” but is “Linear” like all games.

30% would be a massive improvement.

Are you thinking of Intel’s “Hyperthreading”?

Hyperthreading (which AMD calls SMT or Symmetric Multithreading) is not the same as what is in all other places called multithreading, it’s a very different thing.

Multithreading refers generally to the practice of running multiple threads of execution. They may run at the same time in different CPU logical cores, or they might run on the same core, time-shared.

Hyperthreading/SMT is a specific technique which pairs more than one separate execution context (“logical core”) together with one shared set of actual execution units used to implement instructions (“physical core”).

If there are multiple running threads on the two (or more) logical cores on the same physical core, they may get some modest improvement over running in sequence via time-sharing on the same logical core: this is the “up to 30%” figure, which is usually much much much much less than 30% in practice.

However this isn’t really relevant to anything being discussed here – the primary thing is making sure it’s possible to break up work over multiple threads that can run on multiple separate indepdenent physical cores for a roughly 100% speedup thread per thread.

There may then in some cases be additional much smaller benefit from using the additional logical cores of Hyperthreading/SMT, however this would only ever happen when there are more threads than physical cores in the system.

On an 8-core/16-thread processor, that means you need more than 8 simultaneously running active threads to get any benefit from Hyperthreading/SMT. This generally ends up happening only on the portions of the simulation that are heavily parallelized, which produces low-level usage on all logical cores which you can see in Task Manager.

1 Like

Yes, I was writing about Intel “Hypertheading”.

You can spread it across all the other threads ( independent physical cores) as you like but that is what is being done now by the “mainthread”.

The only problem you have is it is a “linear” process. As another person said:
Do step A
When step A completes
Do step B

Linear. You have to accept the fact that all Games are Linear.

Otherwise, you will have all knobs, dials, buttons, scenery, clouds,
yoke, throttle, etc. all simultaneously demanding (fighting) to get their
data displayed on the cockpit and screen.
Mayhem. (Synonyms: chaos, disorder, confusion, havoc)

You can spread it across all the other threads ( independent physical cores) as you like but that is what is being done now by the “mainthread”.

That is the exact opposite of right.

Sorry, but I don’t know what “That is the exact opposite of right.” means.

You seem to really be stuck on this. And what’s weird is that you’re contradicting yourself. You keep saying both that the main thread is splitting work across all cores, and that everything is linear. I can only assume you don’t know what multithreading means, because if you did you would know that you cannot split a linear program over multiple threads.

What you describe is not how multithreading works. How it works is this:
Step A: Do job 1, and at the same time do job 2, and at the same time do job 3, and at the same time do job 4, and so on for however many cores you have.
Step B: Do job 1, and at the same time do job 2, and at the same time do job 3, and at the same time do job 4, and so on for however many cores you have.
And keep doing it.

Furthermore, you are somehow assuming that each state being calculated triggers a frame update, which is very far from the truth. You can calculate the new state of the physics model, while at the same time calculating the new state of cockpit displays and buttons and dials, while at the same time calculating the atmospheric model, while at the same time calculating AI, etc, and when you’re done calculating all of those then you send the data over to the GPU.

You seem to have a very simplistic view of how these things work. What you say may have been true for FSX, but it certainly hasn’t been true since probably FSX:SE. There is a lot of room for parallelization here and for spreading workload across cores. And i bet that the physics model is still monolithic, and it can easily (in theory, not in practice) be split across multiple threads.

1 Like

That is the purpose of having a mainthread and what it does.

So it’s not linear.