HT vs Windows Scheduler

OFaceSIG

Supreme [H]ardness
2FA
Joined
Aug 31, 2009
Messages
4,576
I'm sure this debate has already happened and I'll gladly take a redirect if it already has. What is the advantage of using hyperthreading and allowing the processor to schedule multiple threads on it's cores versus no hyperthreading and letting the windows scheduler do the same thing?
 
Intel designs their HT CPUs to have overprovisioned cores. Meaning each core has more execution units than a typical thread of execution needs or could use. HT allows the OS access to the extra execution units (by having virtual cores) so instead of them being idle (which they would by scheduling alone) they get used. The goal is to keep as many execution units in use as possible.

In my opinion AMD solves the same problem in a totally different way. To me they underprovision their cores (have less execution units than is needed for a typical thread) which allows them to have more physical cores. To make up for the under provisioning of the cores they use high frequencies + turbo. This in theory should lead to better performance if software was written to use all of the cores at high load.
 
Last edited:
Yes I know what you're saying but I used AMD all the way through the 8 core bulldozer and and unfortunately an 8 core bulldozer barely could keep up with a 3570k Ivy Bridge processor which is just a quad core with no HT at all.

I certainly hope steamroller steps up the game.
 
The Windows scheduler looks at the power plan to determine which core to use. If you're in default Balanced settings, Windows will spread out over physical cores first (with the virtual cores "parked"), and then start putting 2 threads per physical CPU. In High Performance Mode, I think all virtual cores are fair game.

Hyperthreading means threads will sometimes compete for the physical core's resources, so you won't see linear scaling, but it's kinda close. 15-20% slower than if you had actual physical cores? Something like that?
 
The Windows scheduler looks at the power plan to determine which core to use. If you're in default Balanced settings, Windows will spread out over physical cores first (with the virtual cores "parked"), and then start putting 2 threads per physical CPU. In High Performance Mode, I think all virtual cores are fair game.

I hope it's opposite.


BTW In applications I do, I often do: if(freeCores > 0){
add(highlyCPUIntensiveThread);} // CPU use equal to LinPack.

Well, it's obvious that if the core don't have REAL computing power, the application which expected doubling in processing, because it received another thread for heavy processing, and calculated simultaneously "ahead" and "current" calculation, would suffer.

Also note, high performance applications often spend significant effort to use all execution ports, by pairing, instruction reordering, or choosing algorithms which when optimized would use CPU to the max. Obviously when there are no free execution units, or all threads needs the same port (which often happens in parallel computing), HT can do squat.
 
Back
Top