How many cores?

I get asked how many cores a CPU has – and its not a straight forward answer – but ill try and explain

(TLDR … get as many cores or threads as you can afford, games and applications will generally run faster with more resources.. however even this isnt always true as an i3 9350k with only 4 cores, screams along at over 5ghz and beats loads of CPUS with more cores/threads  by sheer brute force ! in the right game!!! ) 

Firstly it changes over time:

  • i3 – can have 2 cores, 2 cores 4 thread, 4 cores or 4 cores 8 threads!
  • i5 can have 4, 6 or 10 cores and up to 16 threads
  • i7 can have 4,8,16 cores and up to 20 threads

i9 gets more confusing and Ryzen do much the same, so whats the difference between cores and threads? 

Lets look at an i7 4770 as an example. 

4 Physical cores – 8 Logical cores through a process called ‘Hyperthreading’.

(Highly complicated topic – so I’m issuing a gross oversimplification alert – I *am* taking short cuts in order to explain the idea, not necessarily the true technical detailia.)

Understand there are multiple steps for an instruction to be processed. Once you have that, then it’s fairly easy to grasp that when instruction A is at step #4, then steps 1, 2, 3, and 5 are idle. OK? The next ‘improvement’ would be to take the next instruction and hand it to step 1, knowing that the first instruction is already safely out of the way. So, now you have a processor working on two instructions at once… Yah? Groups of instructions that run as a ‘logical process’ still need to be run as a single entity (a “Thread”).

Well… Because these Threads represent a single logical process, they obviously have to from the same Application. The way most/older computers have handled multiple applications is put everything on hold except the one they are working on at that instant. From there, switch back and forth. It happens really fast, so human beings perceive it as doing both things at once. But that’s not really the case: it does one. Then the other. But never two different applications at the same instant.

The idea behind hyperthreading is to create some logic which can tell which Threads belong to which Application. Once we can track that, then it becomes possible to run two independent ‘Threads’ at once. Earlier we had two instructions from the same ‘Thread’ being worked on at the same time, correct? Being able to tell which instruction belongs to which thread means we can now run two Threads at the same time – just so long as individual instructions aren’t at the same step at the same time.

Since the single (Physical) core can run two Threads at the same time, it’s understood and displayed by the operating system as two processors.

There is a certain amount of overhead needed to keep track, and the software you are running needs to understand how to operate in a ‘Threaded’ environment to take best advantage. So it doesn’t scale perfectly. But it *is* a pretty crafty way to get more work out of the same (physical) asset.

Here’s a pretty good article at ARS Technica on the topic if you want to know the deeper nuts and bolts.