A
multi-core processor is a single
computing component with two or more independent actual processors (called "cores"), which are the units that read and execute
program instructions.
[1] The instructions are ordinary
CPU instructions such as add, move data, and branch, but the multiple cores can run multiple instructions at the same time, increasing overall speed for programs amenable to
parallel computing.
[2] Manufacturers typically integrate the cores onto a single
integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single
chip package.
Processors were originally developed with only one core. A
many-core processor is a multi-core processor in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient
[citation needed] — largely because of issues with congestion in supplying instructions and data to the many processors. The many-core threshold is roughly in the range of several tens of cores; above this threshold
network on chip technology is advantageous.
Tilera processors feature a switch in each core to route data through an on-chip mesh network to lessen the data congestion, enabling their core count to scale up to 100 cores.
A
dual-core processor has two cores (e.g. AMD Phenom II X2, Intel Core Duo), a
quad-core processor contains four cores (e.g. AMD Phenom II X4, Intel's quad-core processors, see
i3,
i5, and
i7 at
Intel Core), a
hexa-core processor contains six cores (e.g.
AMD Phenom II X6, Intel Core i7 Extreme Edition 980X), an
octa-core processor contains eight cores (e.g.
Intel Xeon E7-2820, AMD FX-8150) A multi-core processor implements
multiprocessing in a single physical package. Designers may couple cores in a multi-core device tightly or loosely. For example, cores may or may not share
caches, and they may implement
message passing or
shared memory inter-core communication methods. Common
network topologies to interconnect cores include
bus, ring, two-dimensional mesh, and
crossbar.
Homogeneous multi-core systems include only identical cores,
heterogeneous multi-core systems have cores that are not identical. Just as with single-processor systems, cores in multi-core systems may implement architectures such as
superscalar,
VLIW,
vector processing,
SIMD, or
multithreading.
Multi-core processors are widely used across many application domains including general-purpose,
embedded,
network,
digital signal processing (DSP), and
graphics.
The improvement in performance gained by the use of a multi-core processor depends very much on the software algorithms used and their implementation. In particular, possible gains are limited by the fraction of the software that can be
parallelized to run on multiple cores simultaneously; this effect is described by
Amdahl's law. In the best case, so-called
embarrassingly parallel problems may realize speedup factors near the number of cores, or even more if the problem is split up enough to fit within each core's cache(s), avoiding use of much slower main system memory. Most applications, however, are not accelerated so much unless programmers invest a prohibitive amount of effort in re-factoring the whole problem
[3]. The parallelization of software is a significant ongoing topic of research.