WEBVTT

00:00:00.000 --> 00:00:05.180
Cores, cores, cores. Whether you're an Intel fan or an AMD diehard,

00:00:05.180 --> 00:00:08.280
both of the big PC chip makers are trying to sell you

00:00:08.280 --> 00:00:11.360
on the idea that you need as many cores as possible.

00:00:11.360 --> 00:00:14.920
But wait a second, why can't we just have CPUs

00:00:14.920 --> 00:00:18.480
that have one lone super powerful core?

00:00:18.480 --> 00:00:22.040
Wouldn't that be a lot more straightforward? I mean, think about it.

00:00:22.040 --> 00:00:27.880
Those old school parallel ports that we used to use for printers carried lots of data streams at once,

00:00:27.960 --> 00:00:34.200
but they were actually very slow. Meanwhile, USB ports only handle one data stream

00:00:34.200 --> 00:00:39.600
at a time, but they're very fast. Couldn't we just apply that same idea to CPUs?

00:00:39.600 --> 00:00:44.560
To answer, we spoke with Eric Jihon, Intel's CPU SOC architecture lead,

00:00:44.560 --> 00:00:49.720
and we'd like to thank him along with Thomas Hannaford and Ben Benson for helping us out with this episode.

00:00:49.720 --> 00:00:53.320
As it turns out, a single core is certainly capable

00:00:53.320 --> 00:00:57.320
of juggling multiple programs at one time. This is done by scheduling,

00:00:57.320 --> 00:01:01.760
where each clock cycle of the CPU, and there are billions of those per second,

00:01:01.760 --> 00:01:06.840
is assigned to execute instructions from a certain program or multiple programs.

00:01:06.840 --> 00:01:12.760
Scheduling can be done by the operating system, or more optimally, it can be handled by the CPU's hardware.

00:01:12.760 --> 00:01:16.120
For example, simultaneous multi-threading or SMT

00:01:16.120 --> 00:01:21.000
has been with us since the early 2000s and actually makes your operating system see

00:01:21.000 --> 00:01:24.760
one physical core as two logical cores.

00:01:24.800 --> 00:01:28.160
With SMT then, the operating system will always make sure

00:01:28.160 --> 00:01:31.440
that each physical core has two instruction threads

00:01:31.440 --> 00:01:36.960
to work on so that if a single thread stalls, because the CPU has to wait for additional data,

00:01:36.960 --> 00:01:40.600
the CPU core can still work on the other thread.

00:01:40.600 --> 00:01:45.520
But even with SMT, scheduling still has inefficiencies.

00:01:45.520 --> 00:01:49.440
Each core can still handle only so many instructions per clock cycle,

00:01:49.440 --> 00:01:53.240
and if you're trying to run a ton of programs or processes,

00:01:53.240 --> 00:02:00.080
the whole scheduling paradigm can become overwhelmed, meaning that adding a second or third or fourth core

00:02:00.080 --> 00:02:05.760
can help remove the reliance on the scheduler and allow the CPU to actually do more work.

00:02:05.760 --> 00:02:09.280
But the fact that scheduling is an imperfect solution

00:02:09.280 --> 00:02:12.720
isn't the only reason that we can't just have one big core.

00:02:12.720 --> 00:02:16.240
You also have to think about how much CPUs cost.

00:02:16.240 --> 00:02:19.240
Higher end chips are already expensive enough,

00:02:19.240 --> 00:02:23.360
but if you tried to consolidate a modern, say, eight core chip

00:02:23.360 --> 00:02:27.640
into one big core, the price tag would be even higher.

00:02:27.640 --> 00:02:34.000
You see, in modern CPU fabrication, if you have one core that's bad due to a manufacturing defect,

00:02:34.000 --> 00:02:40.080
you can just disable it at the factory and then sell that chip as a model with fewer cores.

00:02:40.080 --> 00:02:43.440
But if you had one massive core and it was defective,

00:02:43.440 --> 00:02:49.600
you'd have to throw the whole thing away, meaning more waste and higher costs for the consumer.

00:02:49.600 --> 00:02:52.960
There's also the consideration of how you link up a CPU

00:02:52.960 --> 00:02:56.640
to the rest of your PC. A multi-core CPU is set up

00:02:56.640 --> 00:03:00.040
so that each core has its own connection or fabric.

00:03:00.040 --> 00:03:04.680
That gives it access to memory. As you make these fabrics wider and faster,

00:03:04.680 --> 00:03:09.240
it becomes more and more difficult to make a fabric that has the same signal integrity

00:03:09.240 --> 00:03:12.280
as the smaller ones that were designed for multi-core chips.

00:03:12.280 --> 00:03:16.120
But beyond all of these concerns regarding the CPU itself,

00:03:16.120 --> 00:03:20.440
the way we use computers these days really tilts the equation in favor

00:03:20.440 --> 00:03:26.720
of having multi-core processors. Although back in the days of Windows 95 and even XP,

00:03:26.720 --> 00:03:31.800
you could get away with a single core CPU. Modern versions of Windows are often running

00:03:31.800 --> 00:03:35.920
hundreds of processes and thousands of threads at once.

00:03:35.920 --> 00:03:39.080
And because PCs are such general-purpose machines

00:03:39.080 --> 00:03:44.560
that need to be able to adapt to a wide variety of workloads, it's better to have multiple cores

00:03:44.560 --> 00:03:48.880
rather than just hoping that your applications will be optimized enough to take advantage

00:03:48.880 --> 00:03:53.240
of one big single core, especially as it's becoming more and more common

00:03:53.240 --> 00:03:58.720
for programs and even games to actually be able to take advantage of more than one core.

00:03:58.720 --> 00:04:01.960
But there's one alternative that we didn't really talk about.

00:04:01.960 --> 00:04:05.240
If you want one huge core, you could just forget about CPUs

00:04:05.240 --> 00:04:09.680
and go cut open an avocado. That would solve your problem.

00:04:09.680 --> 00:04:14.480
And you wouldn't be hungry anymore. Thanks for watching. Leave a like or a dislike depending how you felt.

00:04:14.480 --> 00:04:19.080
Check out our other videos and leave a comment if you have a suggestion for a future fast as possible.
