How do you monitor this behaviour?
You can read out the threads of applications via process explorer. Just google for it. Little tool that doesn't require an installation.
Here is how Cinebench R15 set to 3 rendering threads looks like in Task Manager (refresh rate "normal"):
Looks like ALL CPU cores would do "something", right?
Well here is how it looks in process explorer (right click on cinebench.exe -> properties -> threads):
You can see that only 3 threads really cause CPU load. There's one tiny thread and 4 additional threads that can be ignored regarding CPU load.
Now the math behind this is:
100% divided by 12 CPU threads = 8.33% maximum overall CPU load per CPU thread.
So if one of these application threads in ProcessExplorer goes close to 8.33%, it's hitting the maximum. All these 3 are "close".
You can't split single application threads so at one point in time, only one CPU thread can calculate that application thread. (physical cores, virtual cores from hyper threading).
A CPU core can only "do something" or "do nothing". 50% "load" actually means 50% of the time calculating stuff and 50% of the time doing nothing.
For some reason, that goes beyond my knowledge, it's more efficient to let one cpu thread calculate an application thread and then let the next cpu thread calculate the application thread.
Probably because the other CPU threads can start "caching" or something.. No idea really.
But all this leads to all CPU threads being used more or less.
On AMD Ryzen CPUs, you will see a different picture in Task Manager. On AMD Ryzen systems, you would probably see 3 CPU threads being close to 100% and the other CPU threads barely showing any load.
The end result is always the same: Apart from when Task Manager shows FULL load on ALL CPU threads, you can't see if your CPU or your GPU is the FPS bottleneck.
Worst case would be an application only running on a single thread and you having a 20 thread CPU.
100% divided by 20 = 5% max overall load for one CPU thread.
So while you would only have 5% overall CPU load, your CPU would still be the bottleneck because you simply can't use more than a single thread.
To know what part of your system is the bottleneck, we luckily can just look at the graphics card load! When it's above 90%, then the graphics card is the bottleneck. In theory it would be 99% or 100%, but modern graphics card have so many different sections like Ray Tracing cores, Video rendering cores, DLSS Tensor Cores...
So some games/applications can't use more than 90% of your GPU. But I've never seen a graphics card limit lower than 90% so that's the value for now.