BIOS setting that controls cpu load sharing

bioscpu

I've noticed that for any long running single threaded task, my home PC allocates full usage to a single logical core for the entire process. However, for the exact same process, my work PC shares the load among all cores (each core takes a turn at running the single threaded process).

Both PCs run Windows 10. My home PC has a different CPU and a different motherboard (ASUS ROG 11th edition).

This seems to be the case for any process, but the example I have just tested it on is an R script I wrote. Both PCs running exactly the same R script, same version of R, have different approaches to cpu load sharing. What's worse is that my home PC seems always to use CPU0 for this sort of thing.

I am hoping that there is a BIOS setting I can apply on my home PC to get it to share the load evenly. Is there?

Best Answer

I believe the most likely culprit is that your home machine is utilizing a feature in the Windows 10 scheduler, widely known as "favored core" support, that prioritizes high-performance cores over low-performance ones. Previous to 2018, a desktop CPU could generally be trusted to run a thread at the same speed no matter which core you put it on. Even if one core were theoretically capable of running at a higher frequency for a given voltage than another core, the CPU was not designed to allow it to.

It was only with the advent of AMD's Zen+ Ryzen CPUs in 2018 that a change in this situation became widespread. With these models, AMD started allowing CPUs with cores of mixed quality to boost to different clock frequencies depending upon which cores are under load. This was rendered largely ineffective when the scheduler swapped the thread around to every core regardless of performance profile. The performance penalty was compounded by AMD's architecture of having the cores split into groups called "CCX"s; transferring a thread from one core to another within a CCX is faster than spreading it among different CCX's.

Intel's "Extreme Edition" CPUs have this sort of explicit, mixed-performance support as well. They refer to it as Intel Turbo Boost Max Technology 3.0. Intel states that the earliest version of Windows 10 supporting this is "RS5", which appears to be 1809.

With IntelĀ® Turbo Boost Max Technology 3.0, lightly-threaded performance is optimized by identifying your processor's fastest cores and directing your most critical workloads to them.

Until 2019, all versions of Windows were ignorant of these facts and scheduled threads equally across all physical cores for AMD CPUs. Windows 10 version 1903 included an updated scheduler that is aware of AMD's CCX units and tries to keep threads within the same unit. link

The improvements are intended to have a special effect on tasks that use only a few cores. The threads would now switch back and forth between the individual CCXs less.

Windows 10 version 1909 brought further improvements to the scheduler, now making it aware of the mixed-performance core situation, in a feature that is called "Favored CPU Core Optimization". link

in a recent Windows Insider blog post Microsoft has stated that Windows 10 19H2 will include optimizations on how instructions are distributed to these favored cores.

I admit, my understanding of this timeline is not 100% certain, and favored cores may be utilized in earlier versions, but it's been surprisingly difficult to find concrete information on this. Most news posts seem to agree that "favored core" support is entirely new to 1909, despite the language implying that it was present in earlier versions.

The ARM architecture actually had explicit support for a mixed-performance configuration like this called "big.LITTLE" since 2011. A Windows 10 build that runs on ARM was released in 2017, and support for big.LITTLE was included either from the start or at least by 2018. This seems to have dovetailed nicely with adding support for our modern Intel & AMD situation.

As an aside, logical cores are only excluded until needed because they are parked, not because the scheduler itself understands anything about them. link

Core Parking is supported only on Windows Server 2008 R2. However, the Core Parking algorithm and infrastructure is also used to balance processor performance between logical processors on Windows 7 client systems with processors that include Intel Hyper-Threading Technology.

Related Question