Intel 80486DX2 CPU Overview
Intel 80486DX2 CPU Overview
An IC that contains a CPU may also contain memory, peripheral interfaces, and other components of a
computer; such integrated devices are variously called microcontrollers or systems on a chip (SoC).
Array processors or vector processors have multiple processors that operate in parallel, with no unit
considered central. Virtual CPUs are an abstraction of dynamical aggregated computational resources.[3]
History
Early computers such as the ENIAC had to be physically rewired to perform different tasks, which caused
these machines to be called "fixed-program computers".[4] The "central processing unit" term has been in
use since as early as 1955.[5][6] Since the term "CPU" is generally defined as a device for software
(computer program) execution, the earliest devices that could rightly be called CPUs came with the advent
of the stored-program computer.
The idea of a stored-program computer had been already present in the design of J. Presper Eckert and
John William Mauchly's ENIAC, but was initially omitted so that it could be finished sooner.[7] On June
30, 1945, before ENIAC was made, mathematician John von Neumann distributed a paper entitled First
Draft of a Report on the EDVAC. It was the outline of a stored-program computer that would eventually be
completed in August 1949.[8] EDVAC was designed to perform a certain number of instructions (or
operations) of various types. Significantly, the programs written for EDVAC were to be stored in high-
speed computer memory rather than specified by the physical wiring of the computer.[9] This overcame a
severe limitation of ENIAC, which was the considerable time and effort required to reconfigure the
computer to perform a new task.[10] With von Neumann's design, the program that EDVAC ran could be
changed simply by changing the contents of the memory. EDVAC was not the first stored-program
computer; the Manchester Baby, which was a small-scale
experimental stored-program computer, ran its first program on 21
June 1948[11] and the Manchester Mark 1 ran its first program
during the night of 16–17 June 1949.[12]
While von Neumann is most often credited with the design of the stored-program computer because of his
design of EDVAC, and the design became known as the von Neumann architecture, others before him,
such as Konrad Zuse, had suggested and implemented similar ideas.[19] The so-called Harvard architecture
of the Harvard Mark I, which was completed before EDVAC,[20][21] also used a stored-program design
using punched paper tape rather than electronic memory.[22] The key difference between the von Neumann
and Harvard architectures is that the latter separates the storage and treatment of CPU instructions and data,
while the former uses the same memory space for both.[23] Most modern CPUs are primarily von Neumann
in design, but CPUs with the Harvard architecture are seen as well, especially in embedded applications;
for instance, the Atmel AVR microcontrollers are Harvard-architecture processors.[24]
Relays and vacuum tubes (thermionic tubes) were commonly used as switching elements;[25][26] a useful
computer requires thousands or tens of thousands of switching devices. The overall speed of a system is
dependent on the speed of the switches. Vacuum-tube computers such as EDVAC tended to average eight
hours between failures, whereas relay computers—such as the slower but earlier Harvard Mark I—failed
very rarely.[6] In the end, tube-based CPUs became dominant because the significant speed advantages
afforded generally outweighed the reliability problems. Most of these early synchronous CPUs ran at low
clock rates compared to modern microelectronic designs. Clock signal frequencies ranging from 100 kHz to
4 MHz were very common at this time, limited largely by the speed of the switching devices they were
built with.[27]
Transistor CPUs
The design complexity of CPUs increased as various technologies facilitated building smaller and more
reliable electronic devices. The first such improvement came with the advent of the transistor. Transistorized
CPUs during the 1950s and 1960s no longer had to be built out of bulky, unreliable, and fragile switching
elements, like vacuum tubes and relays.[28] With this improvement, more complex and reliable CPUs were
built onto one or several printed circuit boards containing discrete (individual) components.
In 1964, IBM introduced its IBM System/360 computer
architecture that was used in a series of computers capable of
running the same programs with different speed and
performance.[29] This was significant at a time when most
electronic computers were incompatible with one another, even
those made by the same manufacturer. To facilitate this
improvement, IBM used the concept of a microprogram (often
called "microcode"), which still sees widespread usage in modern
CPUs.[30] The System/360 architecture was so popular that it
dominated the mainframe computer market for decades and left a
legacy that is still continued by similar modern computers like the
IBM zSeries.[31][32] In 1965, Digital Equipment Corporation
(DEC) introduced another influential computer aimed at the IBM PowerPC 604e processor
scientific and research markets—the PDP-8.[33]
Lee Boysel published influential articles, including a 1967 "manifesto", which described how to build the
equivalent of a 32-bit mainframe computer from a relatively small number of large-scale integration circuits
(LSI).[42][43] The only way to build LSI chips, which are chips with a hundred or more gates, was to build
them using a metal–oxide–semiconductor (MOS) semiconductor manufacturing process (either PMOS
logic, NMOS logic, or CMOS logic). However, some companies continued to build processors out of
bipolar transistor–transistor logic (TTL) chips because bipolar junction transistors were faster than MOS
chips up until the 1970s (a few companies such as Datapoint continued to build processors out of TTL
chips until the early 1980s).[43] In the 1960s, MOS ICs were slower and initially considered useful only in
applications that required low power.[44][45] Following the development of silicon-gate MOS technology
by Federico Faggin at Fairchild Semiconductor in 1968, MOS ICs largely replaced bipolar TTL as the
standard chip technology in the early 1970s.[46]
As the microelectronic technology advanced, an increasing number of transistors were placed on ICs,
decreasing the number of individual ICs needed for a complete CPU. MSI and LSI ICs increased transistor
counts to hundreds, and then thousands. By 1968, the number of ICs required to build a complete CPU had
been reduced to 24 ICs of eight different types, with each IC containing roughly 1000 MOSFETs.[47] In
stark contrast with its SSI and MSI predecessors, the first LSI implementation of the PDP-11 contained a
CPU composed of only four LSI integrated circuits.[48]
Microprocessors
Since microprocessors were first introduced they have almost completely overtaken all other central
processing unit implementation methods. The first commercially available microprocessor, made in 1971,
was the Intel 4004, and the first widely used microprocessor, made in 1974, was the Intel 8080. Mainframe
and minicomputer manufacturers of the time launched proprietary IC development programs to upgrade
their older computer architectures, and eventually produced instruction set compatible microprocessors that
were backward-compatible with their older hardware and software. Combined with the advent and
eventual success of the ubiquitous personal computer, the term CPU is now applied almost exclusively[a] to
microprocessors. Several CPUs (denoted cores) can be combined in a single processing chip.[49]
Previous generations of CPUs were implemented as discrete components and numerous small integrated
circuits (ICs) on one or more circuit boards.[50] Microprocessors, on the other hand, are CPUs
manufactured on a very small number of ICs; usually just one.[51] The overall smaller CPU size, as a result
of being implemented on a single die, means faster switching time because of physical factors like
decreased gate parasitic capacitance.[52][53] This has allowed synchronous microprocessors to have clock
rates ranging from tens of megahertz to several gigahertz. Additionally, the ability to construct exceedingly
small transistors on an IC has increased the complexity and number of transistors in a single CPU many
fold. This widely observed trend is described by Moore's law, which had proven to be a fairly accurate
predictor of the growth of CPU (and other IC) complexity until 2016.[54][55]
While the complexity, size, construction and general form of CPUs
have changed enormously since 1950,[56] the basic design and
function has not changed much at all. Almost all common CPUs
today can be very accurately described as von Neumann stored-
program machines.[57][b] As Moore's law no longer holds,
concerns have arisen about the limits of integrated circuit transistor
technology. Extreme miniaturization of electronic gates is causing
the effects of phenomena like electromigration and subthreshold
leakage to become much more significant.[59][60] These newer
concerns are among the many factors causing researchers to Die of an Intel 80486DX2
investigate new methods of computing such as the quantum microprocessor (actual size: 12 ×
computer, as well as to expand the usage of parallelism and other 6.75 mm) in its packaging
methods that extend the usefulness of the classical von Neumann
model.
Operation
The fundamental operation of most CPUs, regardless of the
physical form they take, is to execute a sequence of stored
instructions that is called a program. The instructions to be
executed are kept in some kind of computer memory. Nearly all
CPUs follow the fetch, decode and execute steps in their operation, Intel Core i5 CPU on a Vaio E series
which are collectively known as the instruction cycle. laptop motherboard (on the right,
beneath the heat pipe)
After the execution of an instruction, the entire process repeats,
with the next instruction cycle normally fetching the next-in-
sequence instruction because of the incremented value in the
program counter. If a jump instruction was executed, the program
counter will be modified to contain the address of the instruction
that was jumped to and program execution continues normally. In
more complex CPUs, multiple instructions can be fetched, decoded
and executed simultaneously. This section describes what is
generally referred to as the "classic RISC pipeline", which is quite
common among the simple CPUs used in many electronic devices
(often called microcontrollers). It largely ignores the important role
of CPU cache, and therefore the access stage of the pipeline.
Fetch
Fetch involves retrieving an instruction (which is represented by a number or sequence of numbers) from
program memory. The instruction's location (address) in program memory is determined by the program
counter (PC; called the "instruction pointer" in Intel x86 microprocessors), which stores a number that
identifies the address of the next instruction to be fetched. After an instruction is fetched, the PC is
incremented by the length of the instruction so that it will contain the address of the next instruction in the
sequence.[d] Often, the instruction to be fetched must be retrieved from relatively slow memory, causing the
CPU to stall while waiting for the instruction to be returned. This issue is largely addressed in modern
processors by caches and pipeline architectures (see below).
Decode
The instruction that the CPU fetches from memory determines what the CPU will do. In the decode step,
performed by binary decoder circuitry known as the instruction decoder, the instruction is converted into
signals that control other parts of the CPU.
The way in which the instruction is interpreted is defined by the CPU's instruction set architecture (ISA).[e]
Often, one group of bits (that is, a "field") within the instruction, called the opcode, indicates which
operation is to be performed, while the remaining fields usually provide supplemental information required
for the operation, such as the operands. Those operands may be specified as a constant value (called an
immediate value), or as the location of a value that may be a processor register or a memory address, as
determined by some addressing mode.
In some CPU designs the instruction decoder is implemented as a hardwired, unchangeable binary decoder
circuit. In others, a microprogram is used to translate instructions into sets of CPU configuration signals that
are applied sequentially over multiple clock pulses. In some cases the memory that stores the microprogram
is rewritable, making it possible to change the way in which the CPU decodes instructions.
Execute
After the fetch and decode steps, the execute step is performed. Depending on the CPU architecture, this
may consist of a single action or a sequence of actions. During each action, control signals electrically
enable or disable various parts of the CPU so they can perform all or part of the desired operation. The
action is then completed, typically in response to a clock pulse. Very often the results are written to an
internal CPU register for quick access by subsequent instructions. In other cases results may be written to
slower, but less expensive and higher capacity main memory.
The actual mathematical operation for each instruction is performed by a combinational logic circuit within
the CPU's processor known as the arithmetic–logic unit or ALU. In general, a CPU executes an instruction
by fetching it from memory, using its ALU to perform an operation, and then storing the result to memory.
Beside the instructions for integer mathematics and logic operations, various other machine instructions
exist, such as those for loading data from memory and storing it back, branching operations, and
mathematical operations on floating-point numbers performed by the CPU's floating-point unit (FPU).[61]
Control unit
The control unit (CU) is a component of the CPU that directs the operation of the processor. It tells the
computer's memory, arithmetic and logic unit and input and output devices how to respond to the
instructions that have been sent to the processor.
It directs the operation of the other units by providing timing and control signals. Most computer resources
are managed by the CU. It directs the flow of data between the CPU and the other devices. John von
Neumann included the control unit as part of the von Neumann architecture. In modern computer designs,
the control unit is typically an internal part of the CPU with its overall role and operation unchanged since
its introduction.[62]
The arithmetic logic unit (ALU) is a digital circuit within the processor that performs integer arithmetic and
bitwise logic operations. The inputs to the ALU are the data words to be operated on (called operands),
status information from previous operations, and a code from the control unit indicating which operation to
perform. Depending on the instruction being executed,
the operands may come from internal CPU registers,
external memory, or constants generated by the ALU
itself.
The address generation unit (AGU), sometimes also called the address computation unit (ACU),[63] is an
execution unit inside the CPU that calculates addresses used by the CPU to access main memory. By
having address calculations handled by separate circuitry that operates in parallel with the rest of the CPU,
the number of CPU cycles required for executing various machine instructions can be reduced, bringing
performance improvements.
While performing various operations, CPUs need to calculate memory addresses required for fetching data
from the memory; for example, in-memory positions of array elements must be calculated before the CPU
can fetch the data from actual memory locations. Those address-generation calculations involve different
integer arithmetic operations, such as addition, subtraction, modulo operations, or bit shifts. Often,
calculating a memory address involves more than one general-purpose machine instruction, which do not
necessarily decode and execute quickly. By incorporating an AGU into a CPU design, together with
introducing specialized instructions that use the AGU, various address-generation calculations can be
offloaded from the rest of the CPU, and can often be executed quickly in a single CPU cycle.
Capabilities of an AGU depend on a particular CPU and its architecture. Thus, some AGUs implement and
expose more address-calculation operations, while some also include more advanced specialized
instructions that can operate on multiple operands at a time. Some CPU architectures include multiple
AGUs so more than one address-calculation operation can be executed simultaneously, which brings
further performance improvements due to the superscalar nature of advanced CPU designs. For example,
Intel incorporates multiple AGUs into its Sandy Bridge and Haswell microarchitectures, which increase
bandwidth of the CPU memory subsystem by allowing multiple memory-access instructions to be executed
in parallel.
Many microprocessors (in smartphones and desktop, laptop, server computers) have a memory
management unit, translating logical addresses into physical RAM addresses, providing memory protection
and paging abilities, useful for virtual memory. Simpler processors, especially microcontrollers, usually
don't include an MMU.
Cache
A CPU cache[64] is a hardware cache used by the central processing unit (CPU) of a computer to reduce
the average cost (time or energy) to access data from the main memory. A cache is a smaller, faster memory,
closer to a processor core, which stores copies of the data from frequently used main memory locations.
Most CPUs have different independent caches, including instruction and data caches, where the data cache
is usually organized as a hierarchy of more cache levels (L1, L2, L3, L4, etc.).
All modern (fast) CPUs (with few specialized exceptions[f]) have multiple levels of CPU caches. The first
CPUs that used a cache had only one level of cache; unlike later level 1 caches, it was not split into L1d
(for data) and L1i (for instructions). Almost all current CPUs with caches have a split L1 cache. They also
have L2 caches and, for larger processors, L3 caches as well. The L2 cache is usually not split and acts as a
common repository for the already split L1 cache. Every core of a multi-core processor has a dedicated L2
cache and is usually not shared between the cores. The L3 cache, and higher-level caches, are shared
between the cores and are not split. An L4 cache is currently uncommon, and is generally on dynamic
random-access memory (DRAM), rather than on static random-access memory (SRAM), on a separate die
or chip. That was also the case historically with L1, while bigger chips have allowed integration of it and
generally all cache levels, with the possible exception of the last level. Each extra level of cache tends to be
bigger and be optimized differently.
Other types of caches exist (that are not counted towards the "cache size" of the most important caches
mentioned above), such as the translation lookaside buffer (TLB) that is part of the memory management
unit (MMU) that most CPUs have.
Caches are generally sized in powers of two: 2, 8, 16 etc. KiB or MiB (for larger non-L1) sizes, although
the IBM z13 has a 96 KiB L1 instruction cache.[65]
Clock rate
Most CPUs are synchronous circuits, which means they employ a clock signal to pace their sequential
operations. The clock signal is produced by an external oscillator circuit that generates a consistent number
of pulses each second in the form of a periodic square wave. The frequency of the clock pulses determines
the rate at which a CPU executes instructions and, consequently, the faster the clock, the more instructions
the CPU will execute each second.
To ensure proper operation of the CPU, the clock period is longer than the maximum time needed for all
signals to propagate (move) through the CPU. In setting the clock period to a value well above the worst-
case propagation delay, it is possible to design the entire CPU and the way it moves data around the
"edges" of the rising and falling clock signal. This has the advantage of simplifying the CPU significantly,
both from a design perspective and a component-count perspective. However, it also carries the
disadvantage that the entire CPU must wait on its slowest elements, even though some portions of it are
much faster. This limitation has largely been compensated for by various methods of increasing CPU
parallelism (see below).
However, architectural improvements alone do not solve all of the drawbacks of globally synchronous
CPUs. For example, a clock signal is subject to the delays of any other electrical signal. Higher clock rates
in increasingly complex CPUs make it more difficult to keep the clock signal in phase (synchronized)
throughout the entire unit. This has led many modern CPUs to require multiple identical clock signals to be
provided to avoid delaying a single signal significantly enough to cause the CPU to malfunction. Another
major issue, as clock rates increase dramatically, is the amount of heat that is dissipated by the CPU. The
constantly changing clock causes many components to switch regardless of whether they are being used at
that time. In general, a component that is switching uses more energy than an element in a static state.
Therefore, as clock rate increases, so does energy consumption, causing the CPU to require more heat
dissipation in the form of CPU cooling solutions.
One method of dealing with the switching of unneeded components is called clock gating, which involves
turning off the clock signal to unneeded components (effectively disabling them). However, this is often
regarded as difficult to implement and therefore does not see common usage outside of very low-power
designs. One notable recent CPU design that uses extensive clock gating is the IBM PowerPC-based
Xenon used in the Xbox 360; that way, power requirements of the Xbox 360 are greatly reduced.[66]
Clockless CPUs
Another method of addressing some of the problems with a global clock signal is the removal of the clock
signal altogether. While removing the global clock signal makes the design process considerably more
complex in many ways, asynchronous (or clockless) designs carry marked advantages in power
consumption and heat dissipation in comparison with similar synchronous designs. While somewhat
uncommon, entire asynchronous CPUs have been built without using a global clock signal. Two notable
examples of this are the ARM compliant AMULET and the MIPS R3000 compatible MiniMIPS.[67]
Rather than totally removing the clock signal, some CPU designs allow certain portions of the device to be
asynchronous, such as using asynchronous ALUs in conjunction with superscalar pipelining to achieve
some arithmetic performance gains. While it is not altogether clear whether totally asynchronous designs
can perform at a comparable or better level than their synchronous counterparts, it is evident that they do at
least excel in simpler math operations. This, combined with their excellent power consumption and heat
dissipation properties, makes them very suitable for embedded computers.[68]
Many modern CPUs have a die-integrated power managing module which regulates on-demand voltage
supply to the CPU circuitry allowing it to keep balance between performance and power consumption.
Integer range
Every CPU represents numerical values in a specific way. For example, some early digital computers
represented numbers as familiar decimal (base 10) numeral system values, and others have employed more
unusual representations such as ternary (base three). Nearly all modern CPUs represent numbers in binary
form, with each digit being represented by some two-valued physical quantity such as a "high" or "low"
voltage.[g]
Integer range can also affect the number of memory locations the CPU can directly address (an address is
an integer value representing a specific memory location). For example, if a binary CPU uses 32 bits to
represent a memory address then it can directly address 232 memory locations. To circumvent this limitation
and for various other reasons, some CPUs use mechanisms (such as bank switching) that allow additional
memory to be addressed.
CPUs with larger word sizes require more circuitry and consequently are physically larger, cost more and
consume more power (and therefore generate more heat). As a result, smaller 4- or 8-bit microcontrollers
are commonly used in modern applications even though CPUs with much larger word sizes (such as 16,
32, 64, even 128-bit) are available. When higher performance is required, however, the benefits of a larger
word size (larger data ranges and address spaces) may outweigh the disadvantages. A CPU can have
internal data paths shorter than the word size to reduce size and cost. For example, even though the IBM
System/360 instruction set was a 32-bit instruction set, the System/360 Model 30 and Model 40 had 8-bit
data paths in the arithmetic logical unit, so that a 32-bit add required four cycles, one for each 8 bits of the
operands, and, even though the Motorola 68000 series instruction set was a 32-bit instruction set, the
Motorola 68000 and Motorola 68010 had 16-bit data paths in the arithmetic logical unit, so that a 32-bit add
required two cycles.
To gain some of the advantages afforded by both lower and higher bit lengths, many instruction sets have
different bit widths for integer and floating-point data, allowing CPUs implementing that instruction set to
have different bit widths for different portions of the device. For example, the IBM System/360 instruction
set was primarily 32 bit, but supported 64-bit floating-point values to facilitate greater accuracy and range in
floating-point numbers.[30] The System/360 Model 65 had an 8-bit adder for decimal and fixed-point
binary arithmetic and a 60-bit adder for floating-point arithmetic.[69] Many later CPU designs use similar
mixed bit width, especially when the processor is meant for general-purpose usage where a reasonable
balance of integer and floating-point capability is required.
Parallelism
This process gives rise to an inherent inefficiency in subscalar CPUs. Since only one instruction is executed
at a time, the entire CPU must wait for that instruction to complete before proceeding to the next
instruction. As a result, the subscalar CPU gets "hung up" on instructions which take more than one clock
cycle to complete execution. Even adding a second execution unit (see below) does not improve
performance much; rather than one pathway being hung up, now two pathways are hung up and the
number of unused transistors is increased. This design, wherein the CPU's execution resources can operate
on only one instruction at a time, can only possibly reach scalar performance (one instruction per clock
cycle, IPC = 1). However, the performance is nearly always subscalar (less than one instruction per clock
cycle, IPC < 1).
Attempts to achieve scalar and better performance have resulted in a variety of design methodologies that
cause the CPU to behave less linearly and more in parallel. When referring to parallelism in CPUs, two
terms are generally used to classify these design techniques:
instruction-level parallelism (ILP), which seeks to increase the rate at which instructions are
executed within a CPU (that is, to increase the use of on-die execution resources);
task-level parallelism (TLP), which purposes to increase the number of threads or processes
that a CPU can execute simultaneously.
Each methodology differs both in the ways in which they are implemented, as well as the relative
effectiveness they afford in increasing the CPU's performance for an application.[i]
Instruction-level parallelism
Pipelining does, however, introduce the possibility for a situation where the result of the previous operation
is needed to complete the next operation; a condition often termed data dependency conflict. Therefore
pipelined processors must check for these sorts of conditions and delay a portion of the pipeline if
necessary. A pipelined processor can become very nearly scalar, inhibited only by pipeline stalls (an
instruction spending more than one clock cycle in a stage).
Most of the difficulty in the design of a superscalar CPU architecture lies in creating an effective dispatcher.
The dispatcher needs to be able to quickly determine whether instructions can be executed in parallel, as
well as dispatch them in such a way as to keep as many execution units busy as possible. This requires that
the instruction pipeline is filled as often as possible and requires significant amounts of CPU cache. It also
makes hazard-avoiding techniques like branch prediction, speculative execution, register renaming, out-of-
order execution and transactional memory crucial to maintaining high levels of performance. By attempting
to predict which branch (or path) a conditional instruction will take, the CPU can minimize the number of
times that the entire pipeline must wait until a conditional instruction is completed. Speculative execution
often provides modest performance increases by executing portions of code that may not be needed after a
conditional operation completes. Out-of-order execution somewhat rearranges the order in which
instructions are executed to reduce delays due to data dependencies. Also in case of single instruction
stream, multiple data stream—a case when a lot of data from the same type has to be processed—, modern
processors can disable parts of the pipeline so that when a single instruction is executed many times, the
CPU skips the fetch and decode phases and thus greatly increases performance on certain occasions,
especially in highly monotonous program engines such as video creation software and photo processing.
When just a fraction of the CPU is superscalar, the part that is not suffers a performance penalty due to
scheduling stalls. The Intel P5 Pentium had two superscalar ALUs which could accept one instruction per
clock cycle each, but its FPU could not. Thus the P5 was integer superscalar but not floating point
superscalar. Intel's successor to the P5 architecture, P6, added superscalar abilities to its floating-point
features.
Simple pipelining and superscalar design increase a CPU's ILP by allowing it to execute instructions at
rates surpassing one instruction per clock cycle. Most modern CPU designs are at least somewhat
superscalar, and nearly all general purpose CPUs designed in the last decade are superscalar. In later years
some of the emphasis in designing high-ILP computers has been moved out of the CPU's hardware and
into its software interface, or instruction set architecture (ISA). The strategy of the very long instruction
word (VLIW) causes some ILP to become implied directly by the software, reducing the CPU’s work in
boosting ILP and thereby reducing design complexity.
Task-level parallelism
Another strategy of achieving performance is to execute multiple threads or processes in parallel. This area
of research is known as parallel computing.[71] In Flynn's taxonomy, this strategy is known as multiple
instruction stream, multiple data stream (MIMD).[72]
One technology used for this purpose was multiprocessing (MP).[73] The initial flavor of this technology is
known as symmetric multiprocessing (SMP), where a small number of CPUs share a coherent view of their
memory system. In this scheme, each CPU has additional hardware to maintain a constantly up-to-date
view of memory. By avoiding stale views of memory, the CPUs can cooperate on the same program and
programs can migrate from one CPU to another. To increase the number of cooperating CPUs beyond a
handful, schemes such as non-uniform memory access (NUMA) and directory-based coherence protocols
were introduced in the 1990s. SMP systems are limited to a small number of CPUs while NUMA systems
have been built with thousands of processors. Initially, multiprocessing was built using multiple discrete
CPUs and boards to implement the interconnect between the processors. When the processors and their
interconnect are all implemented on a single chip, the technology is known as chip-level multiprocessing
(CMP) and the single chip as a multi-core processor.
It was later recognized that finer-grain parallelism existed with a single program. A single program might
have several threads (or functions) that could be executed separately or in parallel. Some of the earliest
examples of this technology implemented input/output processing such as direct memory access as a
separate thread from the computation thread. A more general approach to this technology was introduced in
the 1970s when systems were designed to run multiple computation threads in parallel. This technology is
known as multi-threading (MT). This approach is considered more cost-effective than multiprocessing, as
only a small number of components within a CPU is replicated to support MT as opposed to the entire
CPU in the case of MP. In MT, the execution units and the memory system including the caches are shared
among multiple threads. The downside of MT is that the hardware support for multithreading is more
visible to software than that of MP and thus supervisor software like operating systems have to undergo
larger changes to support MT. One type of MT that was implemented is known as temporal multithreading,
where one thread is executed until it is stalled waiting for data to return from external memory. In this
scheme, the CPU would then quickly context switch to another thread which is ready to run, the switch
often done in one CPU clock cycle, such as the UltraSPARC T1. Another type of MT is simultaneous
multithreading, where instructions from multiple threads are executed in parallel within one CPU clock
cycle.
For several decades from the 1970s to early 2000s, the focus in designing high performance general
purpose CPUs was largely on achieving high ILP through technologies such as pipelining, caches,
superscalar execution, out-of-order execution, etc. This trend culminated in large, power-hungry CPUs
such as the Intel Pentium 4. By the early 2000s, CPU designers were thwarted from achieving higher
performance from ILP techniques due to the growing disparity between CPU operating frequencies and
main memory operating frequencies as well as escalating CPU power dissipation owing to more esoteric
ILP techniques.
CPU designers then borrowed ideas from commercial computing markets such as transaction processing,
where the aggregate performance of multiple programs, also known as throughput computing, was more
important than the performance of a single thread or process.
This reversal of emphasis is evidenced by the proliferation of dual and more core processor designs and
notably, Intel's newer designs resembling its less superscalar P6 architecture. Late designs in several
processor families exhibit CMP, including the x86-64 Opteron and Athlon 64 X2, the SPARC
UltraSPARC T1, IBM POWER4 and POWER5, as well as several video game console CPUs like the
Xbox 360's triple-core PowerPC design, and the PlayStation 3's 7-core Cell microprocessor.
Data parallelism
A less common but increasingly important paradigm of processors (and indeed, computing in general) deals
with data parallelism. The processors discussed earlier are all referred to as some type of scalar device.[j] As
the name implies, vector processors deal with multiple pieces of data in the context of one instruction. This
contrasts with scalar processors, which deal with one piece of data for every instruction. Using Flynn's
taxonomy, these two schemes of dealing with data are generally referred to as single instruction stream,
multiple data stream (SIMD) and single instruction stream, single data stream (SISD), respectively. The
great utility in creating processors that deal with vectors of data lies in optimizing tasks that tend to require
the same operation (for example, a sum or a dot product) to be performed on a large set of data. Some
classic examples of these types of tasks include multimedia applications (images, video and sound), as well
as many types of scientific and engineering tasks. Whereas a scalar processor must complete the entire
process of fetching, decoding and executing each instruction and value in a set of data, a vector processor
can perform a single operation on a comparatively large set of data with one instruction. This is only
possible when the application tends to require many steps which apply one operation to a large set of data.
Most early vector processors, such as the Cray-1, were associated almost exclusively with scientific
research and cryptography applications. However, as multimedia has largely shifted to digital media, the
need for some form of SIMD in general-purpose processors has become significant. Shortly after inclusion
of floating-point units started to become commonplace in general-purpose processors, specifications for and
implementations of SIMD execution units also began to appear for general-purpose processors. Some of
these early SIMD specifications – like HP's Multimedia Acceleration eXtensions (MAX) and Intel's MMX
– were integer-only. This proved to be a significant impediment for some software developers, since many
of the applications that benefit from SIMD primarily deal with floating-point numbers. Progressively,
developers refined and remade these early designs into some of the common modern SIMD specifications,
which are usually associated with one instruction set architecture (ISA). Some notable modern examples
include Intel's Streaming SIMD Extensions (SSE) and the PowerPC-related AltiVec (also known as
VMX).[k]
Many modern architectures (including embedded ones) often include hardware performance counters
(HPC), which enables low-level (instruction-level) collection, benchmarking, debugging or analysis of
running software metrics.[74][75] HPC may also be used to discover and analyze unusual or suspicious
activity of the software, such as return-oriented programming (ROP) or sigreturn-oriented programming
(SROP) exploits etc.[76] This is usually done by software-security teams to assess and find malicious binary
programs.
Many major vendors (such as IBM, Intel, AMD, and Arm etc.) provide software interfaces (usually written
in C/C++) that can be used to collected data from CPUs registers in order to get metrics.[77] Operating
system vendors also provide software like perf (Linux) to record, benchmark, or trace CPU events
running kernels and applications.
Virtual CPUs
Cloud computing can involve subdividing CPU operation into virtual central processing units[78]
(vCPUs[79]).
A host is the virtual equivalent of a physical machine, on which a virtual system is operating.[80] When
there are several physical machines operating in tandem and managed as a whole, the grouped computing
and memory resources form a cluster. In some systems, it is possible to dynamically add and remove from a
cluster. Resources available at a host and cluster level can be partitioned out into resources pools with fine
granularity.
Performance
The performance or speed of a processor depends on, among many other factors, the clock rate (generally
given in multiples of hertz) and the instructions per clock (IPC), which together are the factors for the
instructions per second (IPS) that the CPU can perform.[81] Many reported IPS values have represented
"peak" execution rates on artificial instruction sequences with few branches, whereas realistic workloads
consist of a mix of instructions and applications, some of which take longer to execute than others. The
performance of the memory hierarchy also greatly affects processor performance, an issue barely
considered in MIPS calculations. Because of these problems, various standardized tests, often called
"benchmarks" for this purpose—such as SPECint—have been developed to attempt to measure the real
effective performance in commonly used applications.
Due to specific capabilities of modern CPUs, such as simultaneous multithreading and uncore, which
involve sharing of actual CPU resources while aiming at increased utilization, monitoring performance
levels and hardware use gradually became a more complex task.[84] As a response, some CPUs implement
additional hardware logic that monitors actual use of various parts of a CPU and provides various counters
accessible to software; an example is Intel's Performance Counter Monitor technology.[2]
See also
Technology portal
Notes
a. Integrated circuits are now used to implement all CPUs, except for a few machines designed
to withstand large electromagnetic pulses, say from a nuclear weapon.
b. The so-called "von Neumann" memo expounded the idea of stored programs,[58] which for
example may be stored on punched cards, paper tape, or magnetic tape.
c. Some early computers, like the Harvard Mark I, did not support any kind of "jump"
instruction, effectively limiting the complexity of the programs they could run. It is largely for
this reason that these computers are often not considered to contain a proper CPU, despite
their close similarity to stored-program computers.
d. Since the program counter counts memory addresses and not instructions, it is incremented
by the number of memory units that the instruction word contains. In the case of simple fixed-
length instruction word ISAs, this is always the same number. For example, a fixed-length
32-bit instruction word ISA that uses 8-bit memory words would always increment the PC by
four (except in the case of jumps). ISAs that use variable-length instruction words increment
the PC by the number of memory words corresponding to the last instruction's length.
e. Because the instruction set architecture of a CPU is fundamental to its interface and usage,
it is often used as a classification of the "type" of CPU. For example, a "PowerPC CPU"
uses some variant of the PowerPC ISA. A system can execute a different ISA by running an
emulator.
f. A few specialized CPUs, accelerators or microcontrollers do not have a cache. To be fast, if
needed/wanted, they still have an on-chip scratchpad memory that has a similar function,
while software managed. In e.g. microcontrollers it can be better for hard real-time use, to
have that or at least no cache, as with one level of memory latencies of loads are
predictable.
g. The physical concept of voltage is an analog one by nature, practically having an infinite
range of possible values. For the purpose of physical representation of binary numbers, two
specific ranges of voltages are defined, one for logic '0' and another for logic '1'. These
ranges are dictated by design considerations such as noise margins and characteristics of
the devices used to create the CPU.
h. While a CPU's integer size sets a limit on integer ranges, this can (and often is) overcome
using a combination of software and hardware techniques. By using additional memory,
software can represent integers many magnitudes larger than the CPU can. Sometimes the
CPU's instruction set will even facilitate operations on integers larger than it can natively
represent by providing instructions to make large integer arithmetic relatively quick. This
method of dealing with large integers is slower than utilizing a CPU with higher integer size,
but is a reasonable trade-off in cases where natively supporting the full integer range
needed would be cost-prohibitive. See Arbitrary-precision arithmetic for more details on
purely software-supported arbitrary-sized integers.
i. Neither ILP nor TLP is inherently superior over the other; they are simply different means by
which to increase CPU parallelism. As such, they both have advantages and disadvantages,
which are often determined by the type of software that the processor is intended to run.
High-TLP CPUs are often used in applications that lend themselves well to being split up
into numerous smaller applications, so-called "embarrassingly parallel problems".
Frequently, a computational problem that can be solved quickly with high TLP design
strategies like symmetric multiprocessing takes significantly more time on high ILP devices
like superscalar CPUs, and vice versa.
j. Earlier the term scalar was used to compare the IPC count afforded by various ILP methods.
Here the term is used in the strictly mathematical sense to contrast with vectors. See scalar
(mathematics) and vector (geometric).
k. Although SSE/SSE2/SSE3 have superseded MMX in Intel's general-purpose processors,
later IA-32 designs still support MMX. This is usually done by providing most of the MMX
functionality with the same hardware that supports the much more expansive SSE
instruction sets.
References
1. Kuck, David (1978). Computers and Computations, Vol 1. John Wiley & Sons, Inc. p. 12.
ISBN 978-0471027164.
2. Thomas Willhalm; Roman Dementiev; Patrick Fay (December 18, 2014). "Intel Performance
Counter Monitor – A better way to measure CPU utilization" ([Link]
articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utilization).
[Link]. Archived ([Link]
[Link]/en-us/articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utiliz
ation) from the original on February 22, 2017. Retrieved February 17, 2015.
3. Liebowitz, Kusek, Spies, Matt, Christopher, Rynardt (2014). VMware vSphere Performance:
Designing CPU, Memory, Storage, and Networking for Performance-Intensive Workloads.
Wiley. p. 68. ISBN 978-1-118-00819-5.
4. Regan, Gerard (2008). A Brief History of Computing ([Link]
1848000839). p. 66. ISBN 978-1848000834. Retrieved 26 November 2014.
5. Weik, Martin H. (1955). "A Survey of Domestic Electronic Digital Computing Systems" (http://
[Link]/comp-hist/[Link]#IBM-CPC). Ballistic Research Laboratory. Archived (http
s://[Link]/web/20210126045809/[Link]
C) from the original on 2021-01-26. Retrieved 2020-11-15.
6. Weik, Martin H. (1961). "A Third Survey of Domestic Electronic Digital Computing Systems"
([Link] Ballistic Research Laboratory. Archived (https://
[Link]/web/20170911041654/[Link] from the
original on 2017-09-11. Retrieved 2005-12-16.
7. "Bit By Bit" ([Link]
by-bit-contents/chapter-five/5-1-stored-program-computing/). Haverford College. Archived
from the original ([Link]
ogram-computing/) on October 13, 2012. Retrieved August 1, 2015.
8. "First Draft of a Report on the EDVAC" ([Link]
upp/appendix_a.pdf) (PDF). Moore School of Electrical Engineering, University of
Pennsylvania. 1945. Archived ([Link]
[Link]/legacy/wileychi/wang_archi/supp/appendix_a.pdf) (PDF) from the original on 2021-
03-09. Retrieved 2018-03-31.
9. Stanford University. "The Modern History of Computing" ([Link]
mputing-history/). The Stanford Encyclopedia of Philosophy. Archived ([Link]
g/web/20170303070630/[Link] from the
original on March 3, 2017. Retrieved September 25, 2015.
10. "ENIAC's Birthday" ([Link]
og/eniacs-birthday). The MIT Press. February 9, 2016. Archived from the original ([Link]
[Link]/blog/eniacs-birthday) on October 17, 2018. Retrieved October 17, 2018.
11. Enticknap, Nicholas (Summer 1998), "Computing's Golden Jubilee" ([Link]
[Link]/resurrection/[Link]#d), Resurrection, The Computer Conservation
Society (20), ISSN 0958-7403 ([Link] archived ([Link]
[Link]/web/20190317222331/[Link]
on/[Link]#d) from the original on 17 March 2019, retrieved 26 June 2019
12. "The Manchester Mark 1" ([Link]
th/manchestercomputers/mark1/[Link]). The University of Manchester. Archived (h
ttps://[Link]/web/20150125141909/[Link]
[Link]/birth/manchestercomputers/mark1/[Link]) from the original on
January 25, 2015. Retrieved September 25, 2015.
13. "The First Generation" ([Link]
2). Computer History Museum. Archived ([Link]
p://[Link]/revolution/birth-of-the-computer/4/92) from the original on
November 22, 2016. Retrieved September 29, 2015.
14. "The History of the Integrated Circuit" ([Link]
physics/integrated_circuit/history/[Link]). [Link]. Archived ([Link]
rg/web/20220522104138/[Link]
rated_circuit/history/[Link]) from the original on May 22, 2022. Retrieved July 17, 2022.
15. Turley, Jim (11 August 2003). "Motoring with microprocessors" ([Link]
motoring-with-microprocessors/). Embedded. Archived ([Link]
14214157/[Link] from the original on
14 October 2022. Retrieved December 26, 2022.
16. "Mobile Processor Guide – Summer 2013" ([Link]
or-guide-summer-2013-234354/). Android Authority. 2013-06-25. Archived ([Link]
[Link]/web/20151117034027/[Link]
er-2013-234354/) from the original on 2015-11-17. Retrieved November 15, 2015.
17. "Section 250: Microprocessors and Toys: An Introduction to Computing Systems" ([Link]
[Link]/web/20210413194655/[Link] The
University of Michigan. Archived from the original ([Link]
0/) on April 13, 2021. Retrieved October 9, 2018.
18. "ARM946 Processor" ([Link]
oducts/processors/classic/arm9/[Link]). ARM. Archived from the original ([Link]
[Link]/products/processors/classic/arm9/[Link]) on 17 November 2015.
19. "Konrad Zuse" ([Link] Computer
History Museum. Archived ([Link]
[Link]/fellowawards/hall/konrad-zuse) from the original on October 3, 2016. Retrieved
September 29, 2015.
20. "Timeline of Computer History: Computers" ([Link]
ters/). Computer History Museum. Archived ([Link]
tp://[Link]/timeline/computers/) from the original on December 29, 2017.
Retrieved November 21, 2015.
21. White, Stephen. "A Brief History of Computing - First Generation Computers" ([Link]
[Link]/~stephen/history/[Link]). Archived ([Link]
b/20180102205958/[Link]
from the original on January 2, 2018. Retrieved November 21, 2015.
22. "Harvard University Mark - Paper Tape Punch Unit" ([Link]
ons/catalog/102698407). Computer History Museum. Archived ([Link]
20151122011934/[Link] from the
original on November 22, 2015. Retrieved November 21, 2015.
23. "What is the difference between a von Neumann architecture and a Harvard architecture?"
([Link] ARM.
Archived ([Link]
[Link]?topic=%[Link]%[Link]) from the original on November 18, 2015.
Retrieved November 22, 2015.
24. "Advanced Architecture Optimizes the Atmel AVR CPU" ([Link]
114090428/[Link] Atmel. Archived from the
original ([Link] on November 14, 2015.
Retrieved November 22, 2015.
25. "Switches, transistors and relays" ([Link]
[Link]/schools/gcsebitesize/design/electronics/[Link]). BBC. Archived from
the original ([Link]
ml) on 5 December 2016.
26. "Introducing the Vacuum Transistor: A Device Made of Nothing" ([Link]
miconductors/devices/introducing-the-vacuum-transistor-a-device-made-of-nothing). IEEE
Spectrum. 2014-06-23. Archived ([Link]
[Link]/semiconductors/devices/introducing-the-vacuum-transistor-a-device-made-of-n
othing) from the original on 2018-03-23. Retrieved 27 January 2019.
27. What Is Computer Performance? ([Link] The
National Academies Press. 2011. doi:10.17226/12980 ([Link]
ISBN 978-0-309-15951-7. Archived ([Link]
[Link]/read/12980/chapter/5#55) from the original on June 5, 2016. Retrieved May 16,
2016.
28. "1953: Transistorized Computers Emerge" ([Link]
nsistorized-computers-emerge/). Computer History Museum. Archived ([Link]
g/web/20160601191253/[Link]
ers-emerge/) from the original on June 1, 2016. Retrieved June 3, 2016.
29. "IBM System/360 Dates and Characteristics" ([Link]
inframe/mainframe_FS360.html). IBM. 2003-01-23. Archived ([Link]
171121223500/[Link]
ml) from the original on 2017-11-21. Retrieved 2016-01-13.
30. Amdahl, G. M.; Blaauw, G. A.; Brooks, F. P. Jr. (April 1964). "Architecture of the IBM
System/360". IBM Journal of Research and Development. IBM. 8 (2): 87–101.
doi:10.1147/rd.82.0087 ([Link] ISSN 0018-8646 ([Link]
[Link]/issn/0018-8646).
31. Brodkin, John (7 April 2014). "50 years ago, IBM created mainframe that helped send men to
the Moon" ([Link]
d-mainframe-that-helped-bring-men-to-the-moon/). Ars Technica. Archived ([Link]
[Link]/web/20160408105602/[Link]
rs-ago-ibm-created-mainframe-that-helped-bring-men-to-the-moon/) from the original on 8
April 2016. Retrieved 9 April 2016.
32. Clarke, Gavin. "Why won't you DIE? IBM's S/360 and its legacy at 50" ([Link]
[Link]/2014/04/07/ibm_s_360_50_anniversary/). The Register. Archived ([Link]
[Link]/web/20160424121559/[Link]
ersary/) from the original on 24 April 2016. Retrieved 9 April 2016.
33. "Online PDP-8 Home Page, Run a PDP-8" ([Link] PDP8.
Archived ([Link]
from the original on August 11, 2015. Retrieved September 25, 2015.
34. "Transistors, Relays, and Controlling High-Current Loads" ([Link]
sons/electronics/transistors-relays-and-controlling-high-current-loads/). New York University.
ITP Physical Computing. Archived ([Link]
[Link]/physcomp/lessons/electronics/transistors-relays-and-controlling-high-current-load
s/) from the original on 21 April 2016. Retrieved 9 April 2016.
35. Lilly, Paul (2009-04-14). "A Brief History of CPUs: 31 Awesome Years of x86" ([Link]
[Link]/a-brief-history-of-cpus-31-awesome-years-of-x86/). PC Gamer. Archived (https://
[Link]/web/20160613202439/[Link]
wesome-years-of-x86/) from the original on 2016-06-13. Retrieved June 15, 2016.
36. Patterson, David A.; Hennessy, John L.; Larus, James R. (1999). Computer Organization
and Design: the Hardware/Software Interface ([Link]
0henn/page/751) (2. ed., 3rd print. ed.). San Francisco: Kaufmann. p. 751 ([Link]
g/details/computerorganiz000henn/page/751). ISBN 978-1558604285.
37. "1962: Aerospace systems are first the applications for ICs in computers" ([Link]
[Link]/siliconengine/aerospace-systems-are-first-the-applications-for-ics-in-computer
s/). Computer History Museum. Archived ([Link]
p://[Link]/siliconengine/aerospace-systems-are-first-the-applications-for-i
cs-in-computers/) from the original on October 5, 2018. Retrieved October 9, 2018.
38. "The integrated circuits in the Apollo manned lunar landing program" ([Link]
ov/alsj/[Link]). National Aeronautics and Space Administration. Archived ([Link]
[Link]/web/20190721173218/[Link] from the original
on July 21, 2019. Retrieved October 9, 2018.
39. "System/370 Announcement" ([Link]
ame_PR370.html). IBM Archives. 2003-01-23. Archived ([Link]
20122836/[Link]
from the original on 2018-08-20. Retrieved October 25, 2017.
40. "System/370 Model 155 (Continued)" ([Link]
e/mainframe_PP3155B.html). IBM Archives. 2003-01-23. Archived ([Link]
eb/20160720234350/[Link]
[Link]) from the original on 2016-07-20. Retrieved October 25, 2017.
41. "Models and Options" ([Link] The Digital
Equipment Corporation PDP-8. Archived ([Link]
p://[Link]/~jones/pdp8/models/) from the original on June 26, 2018.
Retrieved June 15, 2018.
42. Ross Knox Bassett (2007). To the Digital Age: Research Labs, Start-up Companies, and the
Rise of MOS Technology ([Link] The
Johns Hopkins University Press. pp. 127–128, 256, and 314. ISBN 978-0-8018-6809-2.
43. Shirriff, Ken. "The Texas Instruments TMX 1795: the first, forgotten microprocessor" ([Link]
[Link]/2015/05/[Link]). Archived ([Link]
[Link]/web/20210126074942/[Link]
[Link]) from the original on 2021-01-26.
44. "Speed & Power in Logic Families" ([Link]
dzo/[Link]). Archived ([Link]
edu/Departments/Engineering/Labs/ddzo/[Link]) from the original on 2017-07-26.
Retrieved 2017-08-02..
45. Stonham, T. J. (1996). Digital Logic Techniques: Principles and Practice ([Link]
[Link]/books?id=UE6vFEnGP2kC). p. 174. ISBN 9780412549700.
46. "1968: Silicon Gate Technology Developed for ICs" ([Link]
engine/silicon-gate-technology-developed-for-ics/). Computer History Museum. Archived (htt
ps://[Link]/web/20200729145834/[Link]
licon-gate-technology-developed-for-ics/) from the original on 2020-07-29. Retrieved
2019-08-16.
47. Booher, R. K. (1968). MOS GP Computer ([Link]
68/5072/00/[Link]) (PDF). International Workshop on Managing Requirements
Knowledge. AFIPS. p. 877. doi:10.1109/AFIPS.1968.126 ([Link]
1968.126). Archived ([Link]
g/csdl/proceedings/afips/1968/5072/00/[Link]) (PDF) from the original on 2017-07-
14.
48. "LSI-11 Module Descriptions" ([Link]
[Link]) (PDF). LSI-11, PDP-11/03 user's manual (2nd ed.). Maynard, Massachusetts: Digital
Equipment Corporation. November 1975. pp. 4–3. Archived ([Link]
11010023115/[Link] (PDF)
from the original on 2021-10-10. Retrieved 2015-02-20.
49. Bigelow, Stephen J. (March 2022). "What is a multicore processor and how does it work?" (h
ttps://[Link]/searchdatacenter/definition/multi-core-processor). TechTarget.
Archived ([Link]
atacenter/definition/multi-core-processor) from the original on July 11, 2022. Retrieved
July 17, 2022.
50. Richard Birkby. "A Brief History of the Microprocessor" ([Link]
3205820/[Link]
[Link]. Archived from the original ([Link]
[Link]) on September 23, 2015. Retrieved October 13, 2015.
51. Osborne, Adam (1980). An Introduction to Microcomputers ([Link]
ctiontomi00adam). Vol. 1: Basic Concepts (2nd ed.). Berkeley, California: Osborne-McGraw
Hill. ISBN 978-0-931988-34-9.
52. Zhislina, Victoria (2014-02-19). "Why has CPU frequency ceased to grow?" ([Link]
[Link]/en-us/blogs/2014/02/19/why-has-cpu-frequency-ceased-to-grow). Intel. Archived (h
ttps://[Link]/web/20170621074555/[Link]
19/why-has-cpu-frequency-ceased-to-grow) from the original on 2017-06-21. Retrieved
October 14, 2015.
53. "MOS Transistor - Electrical Engineering & Computer Science" ([Link]
u/~tking/theses/[Link]) (PDF). University of California. Archived ([Link]
g/archive/20221009/[Link] (PDF) from the
original on 2022-10-09. Retrieved October 14, 2015.
54. Simonite, Tom. "Moore's Law Is Dead. Now What?" ([Link]
1441/moores-law-is-dead-now-what/). MIT Technology Review. Archived ([Link]
[Link]/web/20180822071655/[Link]
ad-now-what/) from the original on 2018-08-22. Retrieved 2018-08-24.
55. "Excerpts from A Conversation with Gordon Moore: Moore's Law" ([Link]
b/20121029060050/[Link]
pts_A_Conversation_with_Gordon_Moore.pdf) (PDF). Intel. 2005. Archived from the original
([Link]
_with_Gordon_Moore.pdf) (PDF) on 2012-10-29. Retrieved 2012-07-25.
56. "A detailed history of the processor" ([Link] Tech
Junkie. 15 December 2016. Archived ([Link]
[Link]/a-cpu-history/) from the original on 14 August 2019. Retrieved
14 August 2019.
57. Eigenmann, Rudolf; Lilja, David (1998). "Von Neumann Computers". Wiley Encyclopedia of
Electrical and Electronics Engineering. doi:10.1002/047134608X.W1704 ([Link]
1002%2F047134608X.W1704). ISBN 047134608X. S2CID 8197337 ([Link]
[Link]/CorpusID:8197337).
58. Aspray, William (September 1990). "The stored program concept". IEEE Spectrum. Vol. 27,
no. 9. p. 51. doi:10.1109/6.58457 ([Link]
59. Saraswat, Krishna. "Trends in Integrated Circuits Technology" ([Link]
s/ee311/NOTES/[Link]) (PDF). Archived ([Link]
09/[Link] (PDF) from the original
on 2022-10-09. Retrieved June 15, 2018.
60. "Electromigration" ([Link] Middle East
Technical University. Archived ([Link]
[Link]/Electromigration/[Link]) from the original on July 31, 2017. Retrieved
June 15, 2018.
61. Ian Wienand (September 3, 2013). "Computer Science from the Bottom Up, Chapter 3.
Computer Architecture" ([Link] (PDF).
[Link]. Archived ([Link]
[Link]/[Link]#page=44) (PDF) from the original on February 6, 2016. Retrieved
January 7, 2015.
62. "Introduction of Control Unit and its Design" ([Link]
ontrol-unit-and-its-design/). GeeksforGeeks. 2018-09-24. Archived ([Link]
eb/20210115072904/[Link]
gn/) from the original on 2021-01-15. Retrieved 2021-01-12.
63. Cornelis Van Berkel; Patrick Meuwissen (January 12, 2006). "Address generation unit for a
processor (US 2006010255 A1 patent application)" ([Link]
0010255). [Link]. Archived ([Link]
[Link]/patents/US20060010255) from the original on April 18, 2016. Retrieved
December 8, 2014.
64. Gabriel Torres (September 12, 2007). "How The Cache Memory Works" ([Link]
[Link]/how-the-cache-memory-works/). Hardware Secrets. Archived ([Link]
[Link]/web/20200801061525/[Link]
ks/) from the original on August 1, 2020. Retrieved August 29, 2019.
65. "IBM z13 and IBM z13s Technical Introduction" ([Link]
s/[Link]) (PDF). IBM. March 2016. p. 20. Archived ([Link]
0221009/[Link] (PDF) from the original
on 2022-10-09.
66. Brown, Jeffery (2005). "Application-customized CPU design" ([Link]
0060212002837/[Link]
lnxw07XBoxDesign). IBM developerWorks. Archived from the original ([Link]
om/developerworks/power/library/pa-fpfxbox/?ca=dgr-lnxw07XBoxDesign) on 2006-02-12.
Retrieved 2005-12-17.
67. Martin, A.J.; Nystrom, M.; Wong, C.G. (November 2003). "Three generations of
asynchronous microprocessors" ([Link] IEEE
Design & Test of Computers. 20 (6): 9–17. doi:10.1109/MDT.2003.1246159 ([Link]
0.1109%2FMDT.2003.1246159). ISSN 0740-7475 ([Link]
5). S2CID 15164301 ([Link] Archived (https://
[Link]/web/20211203174748/[Link] from
the original on 2021-12-03. Retrieved 2022-01-05.
68. Garside, J. D.; Furber, S. B.; Chung, S-H (1999). "AMULET3 Revealed" ([Link]
org/web/20051210205845/[Link]
_A3.php). University of Manchester Computer Science Department. Archived from the
original ([Link] on
December 10, 2005.
69. IBM System/360 Model 65 Functional Characteristics ([Link]
unctional_characteristics/A22-6884-3_360-65_funcChar.pdf) (PDF). IBM. September 1968.
pp. 8–9. A22-6884-3. Archived ([Link]
[Link]/pdf/ibm/360/functional_characteristics/A22-6884-3_360-65_funcChar.pdf) (PDF) from
the original on 2022-10-09.
70. Huynh, Jack (2003). "The AMD Athlon XP Processor with 512KB L2 Cache" ([Link]
[Link]/web/20071128061217/[Link]
(PDF). University of Illinois, Urbana-Champaign. pp. 6–11. Archived from the original ([Link]
[Link]/ece512/Papers/[Link]) (PDF) on 2007-11-28. Retrieved
2007-10-06.
71. Gottlieb, Allan; Almasi, George S. (1989). Highly parallel computing ([Link]
[Link]?id=160438). Redwood City, Calif.: Benjamin/Cummings. ISBN 978-0-8053-0177-9.
Archived ([Link]
60438) from the original on 2018-11-07. Retrieved 2016-04-25.
72. Flynn, M. J. (September 1972). "Some Computer Organizations and Their Effectiveness".
IEEE Trans. Comput. C-21 (9): 948–960. doi:10.1109/TC.1972.5009071 ([Link]
109%2FTC.1972.5009071). S2CID 18573685 ([Link]
573685).
73. Lu, N.-P.; Chung, C.-P. (1998). "Parallelism exploitation in superscalar multiprocessing". IEE
Proceedings - Computers and Digital Techniques. Institution of Electrical Engineers. 145 (4):
255. doi:10.1049/ip-cdt:19981955 ([Link]
74. Uhsadel, Leif; Georges, Andy; Verbauwhede, Ingrid (August 2008). Exploiting Hardware
Performance Counters ([Link] 2008 5th Workshop
on Fault Diagnosis and Tolerance in Cryptography. pp. 59–67. doi:10.1109/FDTC.2008.19
([Link] ISBN 978-0-7695-3314-8. S2CID 1897883 (http
s://[Link]/CorpusID:1897883). Archived ([Link]
1230134328/[Link] from the original on 2021-12-
30. Retrieved 2021-12-30.
75. Rohou, Erven (September 2012). Tiptop: Hardware Performance Counters for the Masses (h
ttps://[Link]/document/6337508). 2012 41st International Conference on
Parallel Processing Workshops. pp. 404–413. doi:10.1109/ICPPW.2012.58 ([Link]
0.1109%2FICPPW.2012.58). ISBN 978-1-4673-2509-7. S2CID 16160098 ([Link]
[Link]/CorpusID:16160098). Archived ([Link]
6/[Link] from the original on 2021-12-30. Retrieved
2021-12-30.
76. Herath, Nishad; Fogh, Anders (2015). "CPU Hardware Performance Counters for Security"
([Link]
[Link]
f) (PDF). USA: Black Hat. Archived ([Link]
[Link]/docs/us-15/materials/us-15-Herath-These-Are-Not-Your-Grand-Daddys-CP
[Link]) (PDF)
from the original on 2015-09-05.
77. DeRose, Luiz A. (2001), Sakellariou, Rizos; Gurd, John; Freeman, Len; Keane, John (eds.),
"The Hardware Performance Monitor Toolkit" ([Link]
8_19), Euro-Par 2001 Parallel Processing, Lecture Notes in Computer Science, Berlin,
Heidelberg: Springer Berlin Heidelberg, vol. 2150, pp. 122–132, doi:10.1007/3-540-44681-
8_19 ([Link] ISBN 978-3-540-42495-6, archived (ht
tps://[Link]/web/20230301143920/[Link]
44681-8_19) from the original on 2023-03-01, retrieved 2021-12-30
78. Anjum, Bushra; Perros, Harry G. (2015). "1: Partitioning the End-to-End QoS Budget to
Domains" ([Link] Bandwidth Allocation for
Video Under Quality of Service Constraints. Focus Series. John Wiley & Sons. p. 3.
ISBN 9781848217461. Retrieved 2016-09-21. "[...] in cloud computing where multiple
software components run in a virtual environment on the same blade, one component per
virtual machine (VM). Each VM is allocated a virtual central processing unit [...] which is a
fraction of the blade's CPU."
79. Fifield, Tom; Fleming, Diane; Gentle, Anne; Hochstein, Lorin; Proulx, Jonathan; Toews,
Everett; Topjian, Joe (2014). "Glossary" ([Link]
AJ). OpenStack Operations Guide. Beijing: O'Reilly Media, Inc. p. 286.
ISBN 9781491906309. Retrieved 2016-09-20. "Virtual Central Processing Unit (vCPU)[:]
Subdivides physical CPUs. Instances can then use those divisions."
80. "VMware Infrastructure Architecture Overview- White Paper" ([Link]
_architecture_wp.pdf) (PDF). VMware. VMware. 2006. Archived ([Link]
hive/20221009/[Link] (PDF) from the original
on 2022-10-09.
81. "CPU Frequency" ([Link] CPU World
Glossary. CPU World. 25 March 2008. Archived ([Link]
26/[Link] from the original on 9
February 2010. Retrieved 1 January 2010.
82. "What is (a) multi-core processor?" ([Link]
80_gci1015740,[Link]). Data Center Definitions. [Link]. Archived (https://
[Link]/web/20100805052158/[Link]
sid80_gci1015740,[Link]) from the original on 5 August 2010. Retrieved 8 August 2016.
83. "Quad Core Vs. Dual Core" ([Link] 8 April 2010.
Archived ([Link]
s-dual-core) from the original on 4 July 2019. Retrieved 7 November 2019.
84. Tegtmeier, Martin. "CPU utilization of multi-threaded architectures explained" ([Link]
[Link]/solaris/post/cpu-utilization-of-multi-threaded-architectures-explained). Oracle.
Archived ([Link]
t/cpu-utilization-of-multi-threaded-architectures-explained) from the original on July 18, 2022.
Retrieved July 17, 2022.
External links
How Microprocessors Work ([Link] at
HowStuffWorks.
25 Microchips that shook the world ([Link]
world) – an article by the Institute of Electrical and Electronics Engineers.
Multithreading enhances CPU utilization by allowing multiple threads to be processed concurrently, improving the handling of asynchronous events and taking better advantage of CPU resources. It increases task-level parallelism (TLP), enabling the CPU to deal with multiple tasks simultaneously. However, it introduces challenges such as managing data synchronization among threads, potential race conditions, and increased complexity in thread scheduling .
Instruction pipelining is crucial in enhancing a CPU's performance by allowing multiple instructions to be processed simultaneously. It achieves this by breaking down the instruction execution process into discrete stages akin to an assembly line, thereby increasing throughput. However, this technique introduces challenges like data dependency conflicts, where the result of a previous operation is required for the next operation. Processors therefore need mechanisms to detect these conflicts and may require pipeline stalling, which can inhibit performance improvements .
Symmetric multiprocessing (SMP) in computer systems allows multiple CPUs to share a coherent view of memory, facilitating tasks to be processed more efficiently by distributing workload across CPUs. This can significantly improve performance for parallelizable tasks. However, SMP systems are generally limited to a small number of CPUs. As the number increases, maintaining a consistent memory state across all CPUs becomes more complex, potentially requiring advanced coherence protocols to manage memory efficiently .
Speculative execution is a technique used in CPUs to improve performance by predicting the paths of future instructions and executing them ahead of time. If the prediction is correct, the CPU avoids pipeline stalls and can continue executing subsequent instructions without interruption. This technique enhances instruction-level parallelism and performance but can lead to wasted computations if predictions are incorrect, requiring rollback of executed actions .
Superscalar architecture enhances CPU performance beyond simple pipelining by allowing multiple instructions to be dispatched and executed simultaneously across multiple execution units, such as ALUs and FPUs. This design increases instruction-level parallelism (ILP), as opposed to simple pipelining which only allows for a sequential staged execution of instructions. The primary challenge in superscalar design is developing an effective dispatcher that can manage dependencies and hazards, keeping execution units busy .
NUMA systems address SMP limitations by enabling more CPUs to cooperate efficiently without the severe bottlenecks associated with maintaining a coherent global memory. In NUMA, each processor has its own local memory, and memory access time varies depending on the memory region's location relative to the processor. This design minimizes memory access contention and is scalable, allowing thousands of processors in a system compared to the limited scalability of SMP systems .
Cache memory in superscalar CPUs is critical for maintaining high throughput by reducing the time needed to fetch data from main memory. It enables the processor to keep execution units busy by quickly supplying the necessary data. In addition, hazard-avoidance techniques like branch prediction and speculative execution minimize the performance penalties associated with control hazards by predicting instruction paths and pre-executing possible branches, thereby reducing stall times .
Advancements such as disabling parts of the instruction pipeline during repetitive operations facilitate SIMD execution. Modern processors manage SIMD operations by allowing a single instruction to process multiple data points simultaneously, skipping fetch and decode phases, thus increasing performance in data-heavy applications like video processing. These advancements optimize performance by streamlining operations and reducing latency .
ISA evolution in high-ILP computing has seen a shift from complex hardware-centric designs to more sophisticated software interfaces like Very Long Instruction Word (VLIW) architectures. VLIW offloads some ILP responsibilities to the compiler, reducing CPU complexity by allowing software to manage instruction parallelism. This ensures that even as hardware complexity grows, the software can effectively manage instruction dispatching and execution .
Performance monitoring technologies in modern CPUs, such as Intel's Performance Counter Monitor, play a crucial role in optimizing CPU resource utilization. They provide real-time data about CPU usage, enabling fine-tuning of applications and system software for better performance. This monitoring helps identify bottlenecks, optimize task scheduling, and improve overall system efficiency by adjusting performance parameters accordingly .