Before we start, I will use the next two blogs to clear up some terminology. If you are familiar with these concepts, I give you permission to jump to the next section. I suggest any software readers still check out the other blog about threads. There is a lot of confusion, even among us software professionals.
We will first look at what a processor, CPU, core and package are. The general media, meaning TV and the like, use these terms pretty loosely. Then we will look at threads, specifically the differences between hardware and software threads. The distinction between these different types of threads is confusing, even to the computer programmer.
THE CORE? CPU? PACKAGE? SILICON? HUH?
Let us look at the left hand side of Figure CPU. Back in the Pentium® days, people referred to the component of a computer that executes a program’s instructions (i.e. the brains of a computer) as either the ‘CPU’ or ‘processor’. There really was not a distinction between the two. The ‘computer chip’ was the silicon upon which an integrated circuit was etched, e.g. our CPU. The ‘package’ was the stylish plastic and metal case that wrapped and protected the silicon, and from which the multitude of pins/connections protruded.
In today’s world, we have processors with multiple CPUs that run multiple threads each, along with multiple chips (silicon) in the same package. Terminology has been updated to reflect this modern world. Look at the right hand side of Figure CPU. What was once a CPU we now call a ‘core’. A processor can contain many cores on the same piece of silicon; a modern laptop now typically contains 2 cores in its processor; a desktop can contain 4 to 6 cores; and a server can contain upwards of 18 cores per processor. The package can now hold not just one silicon integrated circuit but several. It contains the processor silicon, of course. It might also hold flash memory, other specialized processors, and more.
Figure CPU: Processors then and now.
Let us look at Figure SILICON. On the left is the original Pentium circa 1993. On the right is the current generation Intel® Xeon® processor E5-2600 v3 circa 2013. The Pentium processor on the left has one CPU on one silicon chip in a package. The Xeon processor on the right has 18 cores on one silicon chip, each core equivalent to one (very fast and enhanced) old style Pentium CPU. (Can you locate each of the cores?)
Figure SILICON. Pentium vs Xeon E5-2600 v3+
My point is that in the blogs that follow, when talking about the ‘processor’, I refer to the hunk of silicon that contains all the cores and their support circuitry. By a core, I refer to a single processing unit that does computation (formerly known of as a CPU) of which there can be many such units (and each of which can execute two or more threads simultaneously). And by package, I refer to the flat rectangular, metal and plastic container that can hold multiple special purpose processors, memory and other supporting circuitry, each on separate chips of silicon.
Now that we have that settled, in my next installment, we look at something that confuses programmers perhaps more than it does everyone else.
NEXT: OF COURSE, I KNOW WHAT A THREAD IS….DON’T I?
+Just for grins, to the right of the Xeon processor in Figure SILICON, I scaled the Pentium (800nm) to show how large it would be using today’s manufacturing technology (22nm). This is a very rough representation as the size varies depending upon whether you go by # of transistors (1.4 billion / 7.5 million = x187) or feature size ((800nm)^2 / (22nm)^2 = x1322). What is shown is the more conservative x187. Yes, I know that I am not factoring in the actual die size.