I’ll field this one. For reference, I do simulation development for the day job. I’d say it fundamentally isn’t a question of “robustness” nor DX11/12.
Certain computational tasks lend themselves to parallel computing, some do not.
As a real life example… let’s say you’re a student and you have a homework assignment of 5 math problems to do. You can either do them all yourself, or you can email 4 friends of yours an have them each do a problem, and you all share your answers at the end.
Which way is faster? It depends, right?
If each problem only takes about a minute to do, you’ll be faster just doing them all yourself, “on a single core.” You’d be done in 5 minutes, whereas it might take 10 minutes total to send your email out, have everyone get around to doing their problem, and email it all back to each other.
If each problem took a day to do, then you’d be way faster splitting it up amongst the friend group because the time spend emailing each other is WAY smaller than the computation time.
Even then, you run into a situation where… let’s say you use the answer from Problem 1 to go into Problem 2, and then the answer for Problem 2 is a start point for Problem 3. Now you’re back to it being no faster to split the work up because each problem is linked to the one preceding it. You’d have “cores” just sitting around because they can’t do their job until they know something else first.
Whether or not parallel computing is worth it tends to come down to the type of problem, and how long the computation time is vs. the communication time.
Getting back to programming now, early during the Covid-19 stuff I was stuck at home and “off” work. Being bored, I wrote some software to analyze Covid case data day-to-day as it was put out in a centralized repository. If I have 100 data files, one for each day’s data of infections, that’s a good parallel task to analyze them simultaneously because none of them depend on any other. They are entirely self-contained, and each one takes a non-trivial amount of time to parse.
In the case of a flight simulator or racecar simulator or similar, there’s much less opportunity for parallelism. You are marching through time with the physics engine, sometimes 0.001 seconds at a time. I can’t solve 0.002 seconds in the future until I know 0.001 seconds in the future, and I can’t solve 0.001 seconds in the future until I know the answer for the current instant in time. This is an inherently series calculation, marching ahead in time, solving all the aircraft physics as you go. Each solution in time is linked to the one preceding it.
There’s the potential to split the problem up across cores though. You could have lift and drag being computed on Core 1, engine power computed on Core 2, and avionics control on Core 3. But! There’s a penalty in that it takes time for the cores to communicate their answers to each other before they can march forward. Sometimes an appreciable amount of time if you’re computing things hundreds or thousands of times a second. You might find that you’re slower by splitting it up, much like in the homework example before.
I can’t speak specifically to the ins and outs of MSFS as I’m not a developer for it. But that’s the general background for simulation and parallelism. Sometimes it makes sense, sometimes it doesn’t.