Hi all,
I found it a bit surprising that there’s no dedicated CPU usage discussion when people are claiming this game is severely limited by DX11 implementation and single core usage. Therefore, I want to start the discussion here and provide my observations as an ice breaker. However, keep in mind that I am by no means an expert on this subject and it is more of an educated guess on what can be improved from here.
-
How many cores & threads does MSFS use?
I have an R7 3700X (8 core 16 threads) which is plenty for most games from # of core perspective. What I can tell is that MSFS is utilizing all the cores and threads, even though not equally.
-
Core & thread usage
As you can tell from the chart above, the core & thread usage has very interesting patterns. Based on my experience and guess, I have the following categorization
-
Streaming, etc.
I am fairly certain about this because the spikes are largely correlated to internet usage
-
Graphics or the main thread(s)?
I am fairly certain about this as well. DX11 mainly uses 4 threads and there you go. Whenever I had CPU bottleneck, it is always from these 4 threads. I will talk about this bit more later
-
Others
I have no idea what else is taking high CPU usage on these core/threads. I am guessing some weather computation is happening here but I don’t know.
-
-
Why are main threads in the third row (CPU 8 to CPU 11)
It looks like MSFS would prioritize cores or threads that are preferred by Windows. This preference is also indicted in Ryzen Master software as these cores are usually more overclockable.
In my specific setup because I have SMT enabled, each physical core has 2 threads and therefore 8 core 16 threads. So C01 (core 1) is responsible to CPU 0 & 1, C02 (core 2) is responsible to CPU 2 & 3.
So here you can see C05 & 06 (CPU 8 - 11) are preferred by Windows
And when MSFS is running, these 2 cores or 4 threads are more utilized both in terms of % usage as seen above and clock speed
-
CPU bottleneck or main thread(s) limited?
For main threads, my understanding is that per physical core, MSFS alternates the usage of its two threads. This creates an interesting scenario where you won’t have one thread pegged at max utilization all the time, but when combining the two related threads, you would always have a high usage.
Below combined chart is done by my sloppy paint.exe job to illustrate the point
In my game when looking inside the cockpit, my GPU usage is ~80% and it’s because CPU usage on main thread(s) is at near 100%, even though I don’t see the usage of any of my thread is constantly at near 100%
-
Where to go from here
I guess the most important question here is, when DX12 comes, how much extra performance can it squeeze out. I think for my specific case, it can be speculated this way by assuming DX12 could remove CPU bottleneck for me without accounting for other factors: -
Inside the cockpit, the untapped GPU power is 22% (100% - 78%) so the relative potential here is 22% / 78% = 28.2%. So if my current FPS inside cockpit is 30FPS, then at most I can expect 30 * (1+0.282) = 38FPS, or 8FPS improvement
-
Outside the cockpit, I have GPU usage already near 100% so there’s probably no benefit.