Question Which core do programs that use a single core use?

Fl1cks

BANNED
Jun 19, 2021
77
3
35
0
Let’s say that we have a program that only uses a single core, which core would this program use if my CPU has multiple cores? Would it use the first core, Core 0?

I use an I7-11700K and mainly work in After Effects
 

kanewolf

Titan
Moderator
Let’s say that we have a program that only uses a single core, which core would this program use if my CPU has multiple cores? Would it use the first core, Core 0?

I use an I7-11700K and mainly work in After Effects
That depends on the OS. The OS schedules which cores to use. Some BIOS and CPU microcode can provide help to the OS in determining which core can clock highest. But if the OS doesn't have the smarts in the scheduler to use those hints, it won't.
 
Let’s say that we have a program that only uses a single core, which core would this program use if my CPU has multiple cores? Would it use the first core, Core 0?

I use an I7-11700K and mainly work in After Effects
Windows 10 since some time in 2019 has had a scheduler that's 'architecture aware'. Below is linked an interesting article about how it helps with a Lakefield notebook processor. Being an advanced hybrid topology I imagine it's pretty much an extreme example but I'd have to imagine it has the same kind of 'smarts' with later Intel CPU's even if somewhat simpler topology.

https://www.techpowerup.com/270010/windows-10-scheduler-aware-of-lakefield-hybrid-topologies-benchmarked

Ryzen CPU's use a core ranking system, determined by the binning process AMD uses, which is communicated to the OS at startup. When monitoring CPU core and thread utilization while processing workloads with HWInfo64 I can actually 'see' how the scheduler is favoring the higher ranked CPU cores.

I can't see exactly which process thread is on each core though so can't tell if it's getting the optimum pairing of thread to core for maximum performance. I suppose that would take some effort by the programmer of the software as I don't know how the scheduler can know which of several processing threads a process launches would more significanlty affect over-all performance. Something which I can imagine would change at different phases of some processes too.
 
Last edited:
It is my understanding that windows will normally spread out the activity of a single thread out over all available threads.
This is to distribute the heat generation to different parts of the cpu die.
A i7-11700K has a turbo mechanism which will increase the multiplier for a single thread if other conditions allow up to 5.0
CPU cooling must result in 70c. or less and the total cpu load must be low.
 
Ryzen CPU's use a core ranking system, determined by the binning process AMD uses, which is communicated to the OS at startup. When monitoring CPU core and thread utilization while processing workloads with HWInfo64 I can actually 'see' how the scheduler is favoring the higher ranked CPU cores.
That's what Intel Turbo Boost Max Technology 3.0 does.
I can't see exactly which process thread is on each core though so can't tell if it's getting the optimum pairing of thread to core for maximum performance. I suppose that would take some effort by the programmer of the software as I don't know how the scheduler can know which of several processing threads a process launches would more significanlty affect over-all performance. Something which I can imagine would change at different phases of some processes too.
Windows allows for application wide priority and affinity but also for thread specific ones, that's how the scheduler knows which app and thread to run on the fastest cores.
You can even change them yourself with apps like process hacker/lasso and many more in case the programmers screwed up or just used the default compiler settings.
 
...
You can even change them yourself with apps like process hacker/lasso and many more in case the programmers screwed up or just used the default compiler settings.
You can do it with Task Manager too, although it's much more granular as you can really only limit affinity for an entire process, or task in a process 'tree', as far as I can tell.

But even if able to set affinity for each individual threads I've always thought it impractical in routine use-age as I've never seen easy solutions for two problems: 1) how to identify the exact thread that needs to be redirected and 2) how to handle dynamic threads, where the more demanding load moves from one thread to another during different phases of the process.
 

ASK THE COMMUNITY